JSON.parse()大整数精度丢失的问题和解决方法

小白终成大白


文章目录


前言

调试代码时候感觉出鬼了

接口给我的

javascript 复制代码
console.log(extra);
const extraObj = JSON.parse(extra)
console.log(extraObj);
```javascript
在这里插入代码片

我打印出来

{"contentId":1996543874746863617,"commentId":1996544548632276994}

明明是3617打出来就是3600

打出来就是3600

我天呐 当时脑子嗡一下 怎么事 出鬼了

一、原因

数字在JSON.parse之后被近似了!

这是因为JavaScript的Number类型有精度限制。JavaScript的Number类型使用IEEE 754双精度浮点数,它的精度范围大约是-253到253之间。超过这个范围的整数可能无法精确表示,会被近似处理。后端数据提供的contentId是1996543874746863617,这个数字明显超过了2^53(约9e15),所以在JSON.parse的时候会被近似。

二、解决办法

可以把大数字作为字符串处理,或者使用BigInt类型

1.引入库

c 复制代码
pnpm add json-bigint

我这个项目不想引入新的库了 所以选择了第二种

2.字符串处理

c 复制代码
// 处理大整数精度丢失问题:将JSON字符串中的大整数转换为字符串
		const safeJsonStr = extra.replace(/"contentId":(\d+)/g, '"contentId":"$1"').replace(/"commentId":(\d+)/g, '"commentId":"$1"');
		const extraObj = JSON.parse(safeJsonStr)
		console.log(extraObj);
		const id = extraObj.contentId
		console.log(id);

这回打印就没有出现问题了


总结

记录一下自己的问题 加深处理印象

感谢观看

相关推荐
网络毒刘3 小时前
MCP 从 0 接入 Cursor:mcp.json 安装配置到最小调用与常见报错
json
小小龙学IT7 小时前
Go 语言 encoding/json 标准库深度解析:从 Tag 反射到流式处理
golang·json
李游Leo15 小时前
HarmonyOS 7 + Node.js-JSON Schema:审核测试路径与版本事实的一致性门禁【鸿蒙心迹】
node.js·json·harmonyos
ha_lydms2 天前
MaxCompute中JSON函数
大数据·数据库·阿里云·json·dataworks·maxcompute·odps
LeoCrawls2 天前
Python 读取 JSON 常见报错排查,附完整处理函数
python·json·php
星河耀银海3 天前
数据解析:AI返回JSON数据在HTML5中的渲染方法
人工智能·json·html5
三8443 天前
Fastjson 漏洞 · 01 · 认识 Fastjson 与序列化基础
json·fastjson·反序列化
一直在努力的小宁3 天前
【阅读笔记】具身操作的数采方案概览
后端·json·restful·具身智能·vla·vlm
wuyk5554 天前
Python实战项目05:JSON数据解析与数据可视化小案例|全套实战闭环
python·信息可视化·json
波力海苔夹心脆6754 天前
C# 序列化与反序列化详解:System.Text.Json、Newtonsoft.Json、XmlSerializer 用法、特性选项与安全实践
经验分享·后端·c#·json·.net