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);

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


总结

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

感谢观看

相关推荐
测试修炼手册25 分钟前
[测试技术] 深入理解 JSON Web Token (JWT)
前端·json
九转成圣1 小时前
Java 性能优化实战:如何将海量扁平数据高效转化为类目字典树?
java·开发语言·json
小袁拒绝摆烂4 小时前
多表关联大平层转JSON树形结构
java·json
学术阿凡提9 小时前
Spring Boot 集成 Fastjson2 完整教程:从入门到避坑
spring boot·安全·json
LIUAWEIO10 小时前
鸽鸽工具网:免费在线工具大全,打开网页即用
人工智能·安全·ai·json
半天法师15 小时前
Bug 记录:UE 结构体转 JSON 时 Key 字段大小写异常 (Editor 与打包后表现不一致)
ai·ue5·json·bug
鸽芷咕16 小时前
KingbaseES数据类型完全指南:从基础CHAR到JSON/XML/几何类型
xml·oracle·json
归途醉染1 天前
Swifter.Json
c#·json·swifter.json
网络点点滴1 天前
NPM 和 package.json 文件简介
前端·npm·json
夜瞬2 天前
HTTP基础教程:请求方法、状态码、JSON、鉴权、超时、重试与流式返回
网络协议·http·json