Requisitos: He creado una página de análisis en línea para jwt, cuando el contenido de jwt tiene un tipo largo, usar el método JSON por defecto para analizar provoca una pérdida de precisión, como se muestra en la figura siguiente:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiaXRzdnNlLmNvbSIsImlkIjo4OTA2MTM1NDg4MDEwNzc5Mjg1fQ.7tJHcSfbpZkgqw0ALGSRxyqkz2-UxZPhO_12TuKNZus
JavaScript solo tiene un tipo de número: Número, Número es un número de punto flotante de doble precisión y, a diferencia de muchos otros lenguajes de programación, JavaScript no define diferentes tipos de números, como enteros, cortos, largos, de coma flotante, etc. Por lo tanto, en JavaScript, los números no se dividen en tipos enteros y tipos de coma flotante, y todos los números son tipos de coma flotante.
Al expresar un número entero, el número puede representar un rango entero de [−2 a la potencia de 53, 2 a la potencia de 253]. Porque Number tiene 8 bytes y 64 bits, incluyendo 1 bit de signo, 11 bits exponenciales y 52 dígitos mantisa.
Puedes usar Number.MAX_SAFE_INTEGER y Number.MIN_SAFE_INTEGER para ver los enteros de seguridad máximo y mínimo。
Cuando la interfaz backend devuelve un campo de tipo long, el frontend utiliza JSON.parse(text) para deserializar la pantalla, lo que causará un error de visualización, y la solución es que la interfaz backend convierte el campo de tipo largo en tipo de cadena y lo devuelve.
proyecto lossless-json, analizando JSON sin riesgo de perder información numérica. Dirección de GitHub:El inicio de sesión del hipervínculo es visible.
En primer lugarClonar el proyecto lossless-jsonpara construir una biblioteca integrada y minificada (ES5, el PC necesita instalar node.js), y primero instalar las dependencias:
Luego compila de la siguiente manera:
./dist/lossless-json.js Esto generará un paquete de compatibilidad con ES5 que podrá ejecutarse tanto en el navegador como en node.js.
Probado a través de la consola del navegador de la siguiente manera:
Modifica el código del proyecto,Introduce lossless-json.js archivos, llamando a LosslessJSON para serialización y deserialización JSON,Se solucionó el problema de la pérdida de precisión, como se muestra en la figura siguiente:
sea json = LosslessJSON.parse('{"foo":"bar"}'); {foo: 'bar'} sea text = LosslessJSON.stringify(json); '{"foo":"bar"}'
Dirección de la prueba:El inicio de sesión del hipervínculo es visible.
Finalmente, adjunta el archivo de lossless-json.js compilado:
Turistas, si queréis ver el contenido oculto de esta publicación, por favor Respuesta (Fin) |