A space-efficient schema-driven binary JSON serialization format based on JSON Schema
npm install jsonbinpack


JSON BinPack
============
JSON BinPack is an open-source binary JSON
serialization format with a strong focus on space efficiency. It can run in
schema-driven and schema-less mode to encode any JSON document given a matching
JSON Schema 2020-12 definition.
Documentation
-------------
``sh`
npm install --save jsonbinpack
`javascript
const jsonbinpack = require('jsonbinpack')
// Declare a JSON Schema definition
const schema = {
$schema: 'https://json-schema.org/draft/2020-12/schema',
type: 'object',
properties: {
foo: { type: 'string' }
}
}
// (1) Compile the JSON Schema definition into an Encoding schema
const encodingSchema = await jsonbinpack.compileSchema(schema)
// (2) Serialize a matching JSON document using the Encoding schema
const buffer = jsonbinpack.serialize(encodingSchema, {
foo: 'bar'
})
// (3) Deserialize the buffer into the original JSON document
const result = jsonbinpack.deserialize(encodingSchema, buffer)
console.log(result)
> { foo: 'bar' }
`
#### jsonbinpack.compileSchema(JSON Schema): Promise
Convert a JSON Schema definition into an Encoding schema for use with the
.serialize() and .deserialize() functions.
#### jsonbinpack.serialize(Encoding, JSON): Buffer
Serialize a JSON value according to an Encoding schema.
#### jsonbinpack.deserialize(Encoding, Buffer): JSON
Deserialize a buffer according to an Encoding schema.
Building from source
--------------------
Requirements:
- Node.js
- npm
- GNU Make
Installing dependencies:
`sh`
npm install
Compiling the project:
`sh`
makeRun tests
make testRun linter
make lint
Contributing
------------
Thanks for your interest in contributing to the project. We welcome
contributions in any of the following areas:
- Add more JSON + JSON Schema test cases in the
test/e2e
directory
- Improve the documentation at
docs
- Suggesting new encodings to make JSON BinPack more space-efficient
- Performance improvements, primarily in the encoder
- General bug fixes
Additionally, we are tracking the following major changes:
- [ ] Re-write the encoders in C++ and compile to WebAssembly
- [ ] Generate serialization and deserialization C++ code that does not
dynamically traverses the encoding schema for runtime performance reasons
- [ ] Support recursive JSON Schema documents
- [ ] Implement support for the if, then, and else JSON Schema keywordsanyOf
- [ ] Implement support for the JSON keywordcontentEncoding` JSON Schema keyword
- [ ] Implement support for inline binary blobs defined with the
Don't hesitate in getting in touch by creating a
ticket if you
require any guidance on contributing to the project.
License
-------
This project is released under the terms specified in the
license.