JSON.parse 数值类型精度丢失

简介: JSON.parse 数值类型精度丢失

问题

工作中发生这样一个问题,后台返回的json数据到前端经过序列号化后,数值类型数据精度丢失了
客户端,即浏览器上的只要是数值类型,超过15位之后就会出现精度丢失问题

解决
经多方沟通,后台不方便改,那就只能是前端自己找办法了,害

一开始处理方式是前端对字符串通过正则匹配,超过15位的数值转成字符串,但后面发现会有其它情况下也会匹配上,导致最后替换的数据不是一个正常的JSON数据

谷歌找到有个插件库,哈哈,早就有人给出了比较好的方案

方式一

import {
    parse, stringify } from 'lossless-json';

const text = '{"decimal":2.370,"long":9123372036854000123,"big":2.3e+500}';
console.log(JSON.stringify(JSON.parse(text)))
// {"decimal":2.37,"long":9123372036854000000,"big":null}
console.log(stringify(parse(text)))
// {"decimal":2.370,"long":9123372036854000123,"big":2.3e+500}

方式二
对深层次的数据,上面的方式好像有些问题。

// 对number值进行转换,如果不用这个方法,Number类型就变成LosslessNumber
function reviver(key, value) {
   
  if (value && value.isLosslessNumber) {
   
    if (Number.isSafeInteger(parseInt(value.value))) {
   
      return parseInt(value.value)
    }
    return value.value
  } else {
   
    return value
  }
}

const text = '{"decimal":2.370,"long":9123372036854000123,"big":2.3e+500}';
const LosslessJSON = require('lossless-json');
console.log(LosslessJSON.parse(text, reviver));
// {decimal: 2, long: '9123372036854000123', big: 2}

这样就可以解决了

相关文章
|
3月前
|
前端开发 Java 数据库
Java系列之 Long类型返回前端精度丢失
这篇文章讨论了Java后端实体类中Long类型数据在传递给前端时出现的精度丢失问题,并提供了通过在实体类字段上添加`@JsonSerialize(using = ToStringSerializer.class)`注解来确保精度的解决方法。
|
6月前
|
SQL JSON 关系型数据库
【SQL编程】MySQL 5.7.28 版本使用 SQL 直接解析 JSON 字符串(判断是否是合法JSON类型+文本深度+文本长度+值类型+keys获取+值获取+不同深度数据获取)
【SQL编程】MySQL 5.7.28 版本使用 SQL 直接解析 JSON 字符串(判断是否是合法JSON类型+文本深度+文本长度+值类型+keys获取+值获取+不同深度数据获取)
106 0
|
安全 JavaScript
json-bigin大数值问题详解
json-bigin大数值问题详解
629 0
|
Java
Java:String.format格式化浮点数保留指定小数位输出字符串
Java:String.format格式化浮点数保留指定小数位输出字符串
279 0
|
Java
Java:String.format实现double类型保留固定小数位
Java:String.format实现double类型保留固定小数位
158 0
json.Unmarshal() 反序列化字节流到 interface{} 对象,字段 int/int64 类型出现精度丢失
json.Unmarshal() 反序列化字节流到 interface{} 对象,字段 int/int64 类型出现精度丢失
ML之DS:仅需一行代码实现对某字段下的所有数值实现同一机制的改变或转换(比如全部转为str类型/全部取平方值)
ML之DS:仅需一行代码实现对某字段下的所有数值实现同一机制的改变或转换(比如全部转为str类型/全部取平方值)
ML之DS:仅需一行代码实现对某字段下的所有数值实现同一机制的改变或转换(比如全部转为str类型/全部取平方值)
|
JavaScript 前端开发
攀爬TS之路(一) 原始数据类型、任意值类型
攀爬TS之路(一) 原始数据类型、任意值类型
2730 0
|
JSON 前端开发 Java
JAVA 解决JSON long 型 数字过长精度丢失
由于在SpringMVC中, 将Controller方法返回值转换为json对象, 是通过jackson来实现的
|
JSON C# 数据格式
c# json 序列化如何去掉null值
原文:c# json 序列化如何去掉null值 要将一个对象序列化,可是如果对象的属性为null的时候,我们想将属性为null的都去掉。 在这里我使用Newtonsoft.Json.dll 记录一下序列化以及反序列化 json字符串转对象 Model model=JsonConvert.
1765 0