gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:35:06 27 4
gpt4 key购买 nike

我看到了其他相关问题,但它们并没有解决我的问题,或者我可能以某种方式错过了完全相同的已解决问题。

问题来了。我调用的服务返回一个 JSON 响应,其中一些键具有大量数字作为值,我想将它们传递到我的 View 和显示中。问题是他们正在四舍五入,这是我不想要的。实际上它进入了我现在正在做的缓冲区中:

JSON.parse(res.body.toString()) // res.body is a Buffer

并发送给查看。我怎样才能以字符串的形式保留整个数字并将其发送到 View 以便 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 之前用字符串值replace 数值。例如:

const resBody = '{"foo":"bar", "objs":[{"name":"John", "income": 78787878977987787897897897123456786747398}]}';
const resBodyReplaced = resBody.replace(/: *(\d+)/g, ':"$1"');
console.log(JSON.parse(resBodyReplaced).objs[0].income);

关于javascript - 在 Javascript/Node 中将大数转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50540015/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com