Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 8278|Respuesta: 1

[JavaScript] El JS frontal resuelve el problema de la pérdida de precisión de la serialización JSON

[Copiar enlace]
Publicado en 13/2/2022 14:37:43 | | | |
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 favorRespuesta

(Fin)




Anterior:[Combate real]. NET/C# exporta la caché usando la consulta difusa StackExchange.Redis
Próximo:[Práctica] Java no puede detectar excepciones personalizadas usando la reflexión de hutool
Publicado en 13/2/2022 16:28:40 |
Ven a aprender otra vez...
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com