2.1.0 • Published 1 year ago

@ikonopistsev/node-rapidjson v2.1.0

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
1 year ago

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

1 year ago

2.0.6

1 year ago

2.0.9

1 year ago

2.0.8

1 year ago

2.1.0

1 year ago

2.0.3

1 year ago

2.0.5

1 year ago

2.0.4

1 year ago

2.0.2

1 year ago

2.0.1

1 year ago

2.0.0

1 year ago

1.0.26

2 years ago

1.0.25

2 years ago

1.0.24

2 years ago

1.0.23

2 years ago

1.0.22

3 years ago

1.0.21

3 years ago

1.0.20

3 years ago

1.0.19

3 years ago

1.0.18

3 years ago

1.0.17

3 years ago

1.0.16

3 years ago

1.0.15

3 years ago

1.0.14

3 years ago

1.0.13

3 years ago

1.0.12

3 years ago

1.0.11

3 years ago

1.0.10

3 years ago

1.0.9

3 years ago

1.0.8

3 years ago

1.0.7

3 years ago

1.0.6

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago