node.js有没有正确的方法来解析大数字的JSON? (long,bigint,int64)

时间:2013-09-12 03:59:21

标签: node.js long-integer bigint int64

当我解析这一小块JSON

{ "value" : 9223372036854775807 }

这就是我得到的

{ hello: 9223372036854776000 } 

有没有办法正确解析它?

2 个答案:

答案 0 :(得分:25)

没有内置的JSON.parse。您需要手动解析它并将值视为字符串(如果您想使用bignumber.js进行算术运算)您可以使用Douglas Crockford JSON.js库作为解析器的基础。

编辑:我为你创建了一个package

var JSONbig = require('json-bigint');

var json = '{ "value" : 9223372036854775807, "v2": 123 }';
console.log('Input:', json);
console.log('');

console.log('node.js bult-in JSON:')
var r = JSON.parse(json);
console.log('JSON.parse(input).value : ', r.value.toString());
console.log('JSON.stringify(JSON.parse(input)):', JSON.stringify(r));

console.log('\n\nbig number JSON:');
var r1 = JSONbig.parse(json);
console.log('JSON.parse(input).value : ', r1.value.toString());
console.log('JSON.stringify(JSON.parse(input)):', JSONbig.stringify(r1));

输出:

Input: { "value" : 9223372036854775807, "v2": 123 }

node.js bult-in JSON:
JSON.parse(input).value :  9223372036854776000
JSON.stringify(JSON.parse(input)): {"value":9223372036854776000,"v2":123}


big number JSON:
JSON.parse(input).value :  9223372036854775807
JSON.stringify(JSON.parse(input)): {"value":9223372036854775807,"v2":123}

答案 1 :(得分:1)

您可以使用此代码将大数字更改为字符串并正确使用

let obj = '{ "value" : 9223372036854775807, "value1" : 100 }'
let newObj = JSON.parse(obj.replace(/([0-9]{15,30}$\.{0,1}[0-9]{0,})/g, '"$1"'));
console.log(newObj);