web-dev-qa-db-ja.com

node.js大きな数のJSONを解析する適切な方法はありますか? (long、bigint、int64)

この小さなJSONを解析すると

{ "value" : 9223372036854775807 }

それは私が得るものです

{ hello: 9223372036854776000 } 

それを適切に解析する方法はありますか?

22
tartakynov

組み込みのJSON.parseではありません。手動で解析し、値を文字列として扱う必要があります(それらを使用して算術演算を実行する場合は、 bignumber.js があります)Douglas Crockford JSON.js を使用できます。パーサーのベースとしてのライブラリ。

編集:私はあなたのために パッケージ を作成しました:)

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}
29
Andrey Sidorov

このコードを使用して、大きな数を文字列に変更し、正しく使用できます

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);
0
abdolmajid azad