Когда я разбираю этот маленький кусочек JSON
{ "value" : 9223372036854775807 }
это то, что я получаю
{ hello: 9223372036854776000 }
Есть ли способ правильно его разобрать?
Когда я разбираю этот маленький кусочек JSON
{ "value" : 9223372036854775807 }
это то, что я получаю
{ hello: 9223372036854776000 }
Есть ли способ правильно его разобрать?
Не со встроенным JSON.parse. Вам нужно будет проанализировать его вручную и обработать значения как строку (если вы хотите выполнять с ними арифметические действия, есть bignumber .js) Вы можете использовать библиотеку Дугласа Крокфорда JSON.js в качестве основы для своего парсер.
EDIT2 (через 7 лет после первоначального ответа) - скоро это можно будет решить с помощью стандартного JSON API. Взгляните на это предложение TC39 по добавлению доступа к исходной строке в функцию восстановления — https://github.com/tc39/proposal-json-parse-with-source
EDIT1: я создал для вас пакет :)
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}
var JSONbigString = require('json-bigint')({"storeAsString": true});
- person Andrey Sidorov; 11.08.2016
вы можете использовать этот код для преобразования больших чисел в строки, а затем использовать BigInt (data.value)
let str = '{ "value" : -9223372036854775807, "value1" : "100" }'
let data = JSON.parse(str.replace(/([^"^\d])(-?\d{1,90})([^"^\d])/g, '$1"$2"$3'));
console.log(BigInt(data.value).toString());
console.log(data);
"value": 9223372036854776000,
является предполагаемым результатом?
- person connexo; 10.09.2019