在Javascript/Node中将大数转换为字符串
我见过其他相关的问题,但它们并没有解决我的问题,或者可能是我不知何故错过了完全相同的已解决的问题 问题就在这里。我调用的服务返回一个JSON响应,其中一些键的值很大,我想将它们传递到我的视图和显示器上。问题是他们正在被取整,这是我不想要的。实际上,它进入了一个缓冲区,我现在正从中进行:在Javascript/Node中将大数转换为字符串,javascript,node.js,number-formatting,Javascript,Node.js,Number Formatting,我见过其他相关的问题,但它们并没有解决我的问题,或者可能是我不知何故错过了完全相同的已解决的问题 问题就在这里。我调用的服务返回一个JSON响应,其中一些键的值很大,我想将它们传递到我的视图和显示器上。问题是他们正在被取整,这是我不想要的。实际上,它进入了一个缓冲区,我现在正从中进行: JSON.parse(res.body.toString()) // res.body is a Buffer 并发送至查看。我如何以字符串的形式保留整数,并将其发送到视图,以便UI可以使用完全相同的值 我认为
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字符串,您可以在JSON.parse
之前用字符串值替换数值。例如:
const resBody='{“foo”:“bar”,“objs”:[{“name”:“John”,“income”:7878977987789789789712345678747398}';
const resBodyReplaced=resBody.replace(/:*(\d+)/g',:“$1”);
console.log(JSON.parse(resBodyReplaced.objs[0].income))代码>好方法。但你们能从缓冲区转换然后做吗?请参阅问题结尾处的我的代码片段,因为我只需要从缓冲区开始。只需使用您已经使用的toString()
方法:const resBodyReplaced=buf.toString()。replace(…
请查看是否可以在中找到该代码段。如果可以,则可以稍加修改。否则,这是内容:,它看起来是空的。不确定要做什么?运行一些示例(开始键入以排除)
在粘贴箱中,obj
的income
属性在被stringify
加密并变成缓冲区之前
已经因为高于MAX\u SAFE\u INTEGER
而损坏。