2.1.0 • Published 10 months ago
@ikonopistsev/node-rapidjson v2.1.0
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
2.0.7
10 months ago
2.0.6
10 months ago
2.0.9
10 months ago
2.0.8
10 months ago
2.1.0
10 months ago
2.0.3
10 months ago
2.0.5
10 months ago
2.0.4
10 months ago
2.0.2
10 months ago
2.0.1
10 months ago
2.0.0
10 months ago
1.0.26
1 year ago
1.0.25
1 year ago
1.0.24
1 year ago
1.0.23
2 years ago
1.0.22
2 years ago
1.0.21
2 years ago
1.0.20
2 years ago
1.0.19
2 years ago
1.0.18
2 years ago
1.0.17
2 years ago
1.0.16
2 years ago
1.0.15
2 years ago
1.0.14
2 years ago
1.0.13
2 years ago
1.0.12
2 years ago
1.0.11
2 years ago
1.0.10
2 years ago
1.0.9
2 years ago
1.0.8
2 years ago
1.0.7
2 years ago
1.0.6
2 years ago
1.0.5
2 years ago
1.0.4
2 years ago
1.0.3
2 years ago
1.0.2
2 years ago
1.0.1
2 years ago
1.0.0
2 years ago