Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript/Node中将大数转换为字符串_Javascript_Node.js_Number Formatting - Fatal编程技术网

在Javascript/Node中将大数转换为字符串

在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响应,其中一些键的值很大,我想将它们传递到我的视图和显示器上。问题是他们正在被取整,这是我不想要的。实际上,它进入了一个缓冲区,我现在正从中进行:

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
而损坏。