javascript - 在 Javascript/Node 中将大数转换为字符串
问题描述
我看过其他相关问题,但它们并没有解决我的问题,或者我可能以某种方式错过了完全相同的已解决查询。
这是问题所在。我调用的服务返回一个 JSON 响应,其中一些键具有大数字作为值,我想将它们传递给我的视图和显示。问题是他们正在四舍五入,这是我不想要的。实际上它来自我现在正在做的缓冲区:
JSON.parse(res.body.toString()) // res.body is a Buffer
并发送查看。如何以字符串的形式保留整个数字并将其发送到视图,以便 UI 可以使用完全相同的数字。
我认为可能是一个替代品会有所帮助,但它也不起作用。
const replacer = (key, value) => {
if (typeof value === 'number') {
return JSON.stringify(value);
}
return value;
};
//78787878977987787897897897123456786747398
const obj = {
name: 'John',
income: 78787878977987787897897897123456786747398,
car: null
};
var buf = Buffer.from(JSON.stringify(obj));
console.log(buf.toString());
// console.log(JSON.stringify(buf.toString()))
// console.log('func res: ', replacer('key', 78787878977987787897897897123456786747398))
// console.log(obj.income.toString())
console.log(JSON.stringify(obj, replacer));
您可以推荐一些外部受信任的库,或者更好的是,仅通过直接代码向我推荐解决方案。
编辑:
简而言之,结果是:String
在从服务器返回之前将响应转换为。一旦它进入 JS(Buffer
在我的例子中),转换就已经发生了,这意味着从应用程序端,没有什么可以检索它。
如果不修改服务器响应,请告诉我是否有真正的解决方案。
解决方案
不幸的是,该数字高于 max_safe_integer,因此如果它被解析为数字,即使稍后将其转换回字符串(例如使用reviver
函数,第二个参数为JSON.parse
),它也不可靠。但幸运的是,由于您有一个 JSON 字符串,您可以在ingreplace
之前将数值与字符串值一起使用。JSON.parse
例如:
const resBody = '{"foo":"bar", "objs":[{"name":"John", "income": 78787878977987787897897897123456786747398}]}';
const resBodyReplaced = resBody.replace(/: *(\d+)/g, ':"$1"');
console.log(JSON.parse(resBodyReplaced).objs[0].income);
推荐阅读
- c# - 从 Amazon AWS S3 下载对象时,流仅部分读取
- .net - Elasticsearch NEST - 未找到索引后立即的文档
- apostrophe-cms - 批量操作永久删除(循环依赖)
- asp.net - 在从 Postman 访问时,我可以在没有授权的情况下访问数据,但为什么不使用 angular 2 应用程序
- hibernate - 如何使用额外的列更新多对多
- ios - XCode 9.2 - iOS - 存档生产应用程序在协同设计时失败,出现未知错误
- javascript - 即使 Node 进程死亡,也使缓存保持不变
- c# - 使用 NServicebus saga 序列化长时间运行的端点处理程序的执行
- javascript - Bootstrap-Select 不显示 div 选项
- python - 带有 agg 的 pandas groupby 不能在多个列上工作