Node.js есть ли какой-либо правильный способ разбора JSON с большими числами? (long, bigint, int64)

Когда я разбираю этот маленький кусок JSON

{ "value" : 9223372036854775807 }

что я получаю

{ hello: 9223372036854776000 } 

Есть ли способ правильно разобрать его?

Ответ 1

Не со встроенным JSON.parse. Вам нужно будет разобрать его вручную и обработать значения как строку (если вы хотите сделать с ними арифметику bignumber.js), вы можете использовать Douglas Crockford JSON.js в качестве базы для вашего синтаксического анализатора.

EDIT: я создал 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}