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.
const myJsonData = {
"position": '100x200',
"angle": 23,
"label": "Account",
"dimensions": {
"radius": 23,
},
"children": [
{ "name": 'freddy', "age": 19 },
{ "name": 'scooby', "age": 72 },
{ "name": 'shaggy', "age": 11 },
],
}
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.
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.
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!)