@ikonopistsev/node-rapidjson
v2.1.0
Published
rapidjson parser and geneartor, for javascript BigInt
Downloads
17
Readme
node-rapidjson
This module contains rapidjson bindings.
The library was created to simplify working with BigInt in nodejs. Support 32-bit/64-bit signed/unsigned integer and double for JSON number type. See rapidjson features.
Example
const RapidJSON = require("@ikonopistsev/node-rapidjson");
const RapidParser = RapidJSON.RapidParser;
const makeRapidPointer = RapidJSON.makeRapidPointer;
const JSONR = new RapidParser();
const bigintValue = BigInt(2600000000000698546n);
const rapidPointer = makeRapidPointer(['#/*']);
// parsed as BigInt // 2600000000000698546n
const array1 = JSONR.parse(JSONR.stringify([bigintValue]), rapidPointer);
console.log(bigintValue, 'as BigInt', array1[0]);
// parsed as Number // 2600000000000698400
const array2 = JSONR.parse(JSONR.stringify([bigintValue]));
console.log(bigintValue, 'as Number', array2[0]);
const example5 = Buffer.from(JSONR.stringify({
regularNumber: 42,
iWillBigInt: BigInt(9223372036854775801n),
iWillNumber: BigInt(9223372036854775801n),
someArray: [
{ someId: BigInt(9223372036854775801n), someNumber: BigInt(9223372036854775801n) },
{ someId: BigInt(2600000000000698546n), someNumber: BigInt(9223372036854775801n) },
{ someId: BigInt(9223372036854775801n), someNumber: BigInt(9223372036854775801n) },
{ someId: BigInt(2600000000000698546n), someNumber: BigInt(9223372036854775801n) }
],
}));
// only obj.bigInt and someId will be BigInt
const pointer = makeRapidPointer(['#/iWillBigInt', '#/someArray/*/someId']);
console.log(JSONR.parse(example5, pointer));
Schema example
See rapidjson schema.
const RapidDocument = RapidJSON.Document;
const RapidSchema = RapidJSON.Schema;
const schema = new RapidSchema();
const document = new RapidDocument();
const schemaExample = Buffer.from(JSON.stringify({
type: "object",
required: ["numbers"],
properties: {
numbers: {
type: "array",
minItems: 5,
items: { types: "number" }
}
}
}));
if (!schema.parse(schemaExample)) {
throw new Error(`schema: ${schema.parseMessage()} offset:${schema.parseOffset()}`);
}
const example2 = Buffer.from(JSON.stringify({
numbers: [1, 2, 3]
}));
if (!document.parse(example2)) {
throw new Error(`document: ${document.parseMessage()} offset:${document.parseOffset()}`);
}
if (!schema.validate(document)) {
console.log(`check: ${schema.validateKeyword()} (${schema.documentPointer()})`);
} else {
console.log("schema validate ok");
}
const example3 = Buffer.from(JSON.stringify({
number: [1, 2, 3]
}));
if (!document.parse(example3)) {
throw new Error(`document: ${document.parseMessage()} offset:${document.parseOffset()}`);
}
if (!schema.validate(document)) {
console.log(`check: ${schema.validateKeyword()} (${schema.documentPointer()})`);
} else {
console.log("schema validate ok");
}
const example4 = Buffer.from(JSON.stringify({
numbers: [1, 2, 3, 4, 5, 6]
}));
if (!document.parse(example4)) {
throw new Error(`document: ${document.parseMessage()} offset:${document.parseOffset()}`);
} else {
console.log("schema validate ok");
}
if (!schema.validate(document)) {
console.log(`check: ${schema.validateKeyword()} (${schema.documentPointer()})`);
}
Supported platforms
- Linux
- Windows
Requirements
On Linux:
- CMake
- gcc
On Windows:
Installation
npm i @ikonopistsev/node-rapidjson