现象
用javascript把一个json字符串转换为JSON对象,代码:
var jsonStr = '{"id": 47854561584745547, "userId": 547885499847781512}';
var json = JSON.parse(jsonStr);
console.log(json);
运行结果如下:

具体原因:https://www.cnblogs.com/snandy/p/4943138.html
可以发现整数超过 9007199254740992 这个数就可能会丢失精度,解决方法就是将超过这个数字段的值转为字符串类型,为了方便处理16位及以上的整数全部转换为字符串类型。
解决方法
将16位及以上的整数装换为字符串类型,以免丢失精度
var jsonStr = '{"id": 47854561584745547, "userId": 547885499847781}';
// 长整型装换为字符串类型
jsonStr = jsonStr.replace(/"\w+":\s*\d{16,}/g, function(longVal){
let split = longVal.split(":");
return split[0] + ':' + '"' + split[1].trim() + '"';
});
var json = JSON.parse(jsonStr);
console.log(json);
运行结果如下:

我们可以看到17位的整数转成了字符串类型,没有超过16位的整数不做改动。
正则表达式:/"\w+":\s*\d{16,}/g
结语
如果系统中普遍存在长整型的问题,前端可通过全局请求拦截器处理响应的结果!
探讨了在JavaScript中处理大整数时遇到的精度丢失问题,特别是在JSON解析过程中。文章详细介绍了当整数超过一定阈值时如何通过转换为字符串类型来避免精度损失,并提供了解决方案的代码示例。
的精度问题&spm=1001.2101.3001.5002&articleId=105701460&d=1&t=3&u=62318a463c544d39a1af6df58895f250)
3771

被折叠的 条评论
为什么被折叠?



