caprison
v0.1.1
Published
CapriSON is an object notation standard which pulls together parts of JSON, Protobufs, Flatpak, and CSVs.
Readme
CapriSON
CapriSON is an object notation standard which pulls together parts of JSON,
Protobufs, Flatpak, and CSVs. This standard minimizes bytes over the wire by
using a template (stored in your app, similar to a proto) for each object
type while still transmitting the data as human-readable text.
// JSON Serialization (140b gzip'd)
const myJsonData = {
"position": '100x200',
"angle": 23,
"label": "Account",
"dimensions": {
"radius": 23,
},
"children": [
{ "name": 'freddy', "age": 19 },
{ "name": 'scooby', "age": 72 },
{ "name": 'shaggy', "age": 11 },
],
}
// CapriSON Serialization (72b gzip'd)
const myCapriSONData = "23,3,19,freddy,72,scooby,11,shaggy,23,circle,100x200"How it works
Before deploying your app, use CapriSON.templatify to transform any JSON
payload into a template. This template is then used to parse any data sent
from the server.
// Creating the template (Performed in your build step)
const template = CapriSON.templatify(myJsonData);
expect(template).to.deep.equal({
position: 'string',
angle: 'number',
label: 'string',
diameter: {
radius: 'number',
},
children: [
{
name: 'string',
age: 'number',
},
],
});This template (or any other) is then passed to CapriSON.parse during runtime.
// Using the template (Performed at runtime)
const result = CapriSON.parse(template, myCapriSONData)
expect(result).to.deep.equal(myJsonData);At this point your original data with all hierarchy and ordering retained.
Pros vs Cons
Pros
- Relatively efficient data packing
- Human-readable / debuggable
- Typescript support
- Potential for schema checking / enforcement
- Potential for constant-time value look-ups
Cons
- Arrays must have children with the same keys
- Not as efficient as Flatpak or Protobufs (it's still text!)
