Node.js JSON replacement which handles 64-bit integers and arbitrary-precision decimals. It is a modified version of Douglas Crockford's JSON library. Although it can handle 64-bit integers and arbitrary-precision decimals, it is slower than the built-in JSON functions.
$ npm install json-bignum
var bignumJSON = require('json-bignum');
var obj = bignumJSON.parse('{ "decimal": -9223372036854775807.4237482374983253298159 }');
var bignumJSON = require('json-bignum');
var obj = {
bigint: new bignumJSON.BigNumber('92233720368547758074237482374983253298159'),
decimal: new bignumJSON.BigNumber('-9223372036854775807.4237482374983253298159'),
};
console.log(bignumJSON.stringify(obj));
The BigNumber
class simply stores the number as a string. It does not support arithmetic, but if you need that here are some excellent libraries.
- BigDecimal.js: a literal port of Java's
BigInteger
andBigDecimal
classes. - bigint: Big integer arithmetic using GMP.
- bignum: Big integer arithmetic using OpenSSL.
// example using BigDecimal.js
var bignumJSON = require('json-bignum');
var bigdecimal = require('bigdecimal');
var jsonStr = '{"normal":-922337203.234,"big":-9223372036854775807.4237482374983253298159}';
var jsonObj = bignumJSON.parse(jsonStr);
var a = new bigdecimal.BigDecimal(jsonObj.normal.toString());
var b = new bigdecimal.BigDecimal(jsonObj.big.toString());
var sum = a.add(b);
jsonObj.sum = new bignumJSON.BigNumber(sum.toString());
console.log(bignumJSON.stringify(jsonObj));
It is not recommended to mix calls to JSON
and bignumJSON
. For example, JSON.stringify()
does not know how to parse BigNumber
.
Below shows the result of the benchmark on my machine.
$ node benchmark.js
10000 calls of JSON.parse(): 26.746847 ms
10000 calls of JSON.stringify(): 20.824071 ms
10000 calls of bignumJSON.parse() with bignums in JSON: 221.945307 ms
10000 calls of bignumJSON.parse() without bignums in JSON: 150.626292 ms
10000 calls of bignumJSON.stringify() with bignums in JSON: 64.166056 ms
10000 calls of bignumJSON.stringify() without bignums in JSON: 61.860016 ms