在Javascript / Node

时间:2018-05-26 06:31:08

标签: javascript node.js number-formatting

我已经看到了其他相关问题,但是他们没有解决我的问题,或者我可能错过了完全相同的已解决查询。

这是问题所在。我调用的服务返回一个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),转换已经发生,这意味着从应用程序方面来说,没有任何东西可以用来检索它。

如果没有修改服务器响应,请告诉我是否有真正的解决方案。

1 个答案:

答案 0 :(得分:2)

不幸的是,这个数字高于max_safe_integer,所以如果永远被解析为数字,即使它稍后被转换回字符串(例如{{1}函数,reviver的第二个参数),它不可靠。但幸运的是,由于你有一个JSON字符串,你可以在JSON.parse之前使用字符串值replace数值。例如:



JSON.parse