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}

这样就可以解决了

相关文章
|
10天前
|
JSON 人工智能 API
程序调用大模型返回结构化输出(JSON)
本文介绍了如何使用讯飞星火大模型API,并通过Python封装实现结构化数据输出。首先,通过封装SparkAI类,实现了与讯飞星火API的交互,确保了调用的安全性和便捷性。接着,利用Pydantic库定义了数据模型`CalendarEvent`,确保从大模型获取的回答能够被正确解析成预设的结构化JSON格式,从而解决了大模型回答不规范的问题。示例代码展示了如何构造请求、接收并解析响应,最终输出结构化的活动信息。
35 3
|
5月前
|
C#
C#数值类型介绍及示例
C#数值类型介绍及示例
|
6月前
|
SQL JSON 关系型数据库
【SQL编程】MySQL 5.7.28 版本使用 SQL 直接解析 JSON 字符串(判断是否是合法JSON类型+文本深度+文本长度+值类型+keys获取+值获取+不同深度数据获取)
【SQL编程】MySQL 5.7.28 版本使用 SQL 直接解析 JSON 字符串(判断是否是合法JSON类型+文本深度+文本长度+值类型+keys获取+值获取+不同深度数据获取)
114 0
|
安全 JavaScript
json-bigin大数值问题详解
json-bigin大数值问题详解
754 0
json.Unmarshal() 反序列化字节流到 interface{} 对象,字段 int/int64 类型出现精度丢失
json.Unmarshal() 反序列化字节流到 interface{} 对象,字段 int/int64 类型出现精度丢失
|
JSON Java 数据格式
JSON学习(一):JavaBean、List类型及Map类型与Json类型的相互转化
JSON学习(一):JavaBean、List类型及Map类型与Json类型的相互转化
258 0
ML之DS:仅需一行代码实现对某字段下的所有数值实现同一机制的改变或转换(比如全部转为str类型/全部取平方值)
ML之DS:仅需一行代码实现对某字段下的所有数值实现同一机制的改变或转换(比如全部转为str类型/全部取平方值)
ML之DS:仅需一行代码实现对某字段下的所有数值实现同一机制的改变或转换(比如全部转为str类型/全部取平方值)
|
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.
1770 0