bison

bison

bison

A JSON to binary tool. This tool takes in JSON and converts it to a binary structure to save some bytes. This library is intended to serialize a JSON object similar to how you might expect with something like JSON.stringify.

Installing

npm i @jeffriggle/bison

Basic usage

const { encode, decode } = require('@jeffriggle/bison/cjs/index')

const jsonObject = {
    hello: 'World',
    num: 42,
    required: false
    nested: {
        foo: 'bar',
        arr: [42, 15, 'baz']
    }
}

const encoded = encode(jsonObject)
console.log(encoded) // binary structure.
const decoded = decode(encoded)
console.log(decoded) // original object.

Examples

Examples using bison can be found here https://github.com/JeffreyRiggle/bison-examples

Initial testing

All testing has been done on a local development machine, results may vary. To run the tests yourself use the npm run perf:nano through npm run perf:large commands provided by this package.

Encoding

Basic encoding in this case is using a very simple approach

const encoded = Buffer.from(JSON.stringify(obj))
Encode Type Encode Size Encode Time
Basic nano 12 0.168547
Bison nano 9 0.668347
Basic small 114 0.180368
Bison small 91 1.210133
Basic medium 501609 2.040591
Bison medium 473877 67.735946
Basic large 1003207 5.178138
Bison large 947742 133.127045

Decoding

Basic decoding in this case is using a very simple approach

const decoded = JSON.parse(buff.toString('utf8'))
Decode Type Decode Time
Basic nano 65.414897
Bison nano 63.667062
Basic small 65.364427
Bison small 63.256234
Basic medium 160.526895
Bison medium 135.599895
Basic large 216.865982
Bison large 176.570844

Totals

Type Total time delta Size delta
nano +1.248035 +3
small +1.078428 +23
medium -40.768355 +27732
large -87.653769 +55465

Time differences are Basic - Bison (positive numbers are improvements)