3.0.0 • Published 3 years ago
fast-json v3.0.0
fast-json
A lightning fast on the fly JSON parser able to return JSON values and structures from plain JSON as String or Buffer. It's much faster than JSON.parse() and doesn't require any extra memory allocation for the data processed.
Install
npm install fast-jsonUsage
const { FastJson } = require('fast-json');
const data = JSON.stringify({
ireland: {
people: [{ name: 'Alex' }, { name: 'John' }, { name: 'Cian' }],
},
spain: {
people: [{ name: 'Antonio' }, { name: 'Juan' }, { name: 'Pedro' }],
},
});
const fastJson = new FastJson();
// Path is a string representing a javascript object path
fastJson.on('ireland.people', (value) => {
console.log('ireland.people ->', value);
});
// Paths can be also an array of keys
fastJson.on(['spain', 'people', '1', 'name'], (value) => {
console.log(['spain', 'people', '1', 'name'], '->', value);
});
// Wildcards can be used to match all items in object or array
fastJson.on('spain.people[*].name', (value) => {
console.log('spain.people[*].name ->', value);
});
fastJson.on('*.people[*].name', (value) => {
console.log('*.people[*].name ->', value);
});
fastJson.write(data);
// The JSON can be string or Buffer
// fastJson.write(Buffer.from(data))fastJson.on('ireland.people[1].name', (value) => {
console.log('ireland.people[1].name ->', value);
// Once we have all we need, we can skip the rest of the JSON to improve performance.
fastJson.skip();
});// Path separator defines the keys separator on the listeners
const fastJson = new FastJson({ pathSeparator: '/' });
// In this case it allows keys having dots by using a different separator
fastJson.on('unknown.country/people/0/name', (value) => {
console.log('unknown.country/people/0/name ->', value);
});Performance
JSON file citylots.json of 189MB from https://github.com/zemirco/sf-city-lots-json.
- fast-json: 0.56s / 198MB RAM
- JSON.parse: 1.8s / 640MB RAM
- jsonparse: 15.0s / 1,100MB RAM (Only reading, it wasn't able to return a value)
TODO
- Feature Allow chunked JSON.
- Feature Match more glob patters.
- Feature Add more flexibility to event listeners (on, once, off, etc).
- Documentation Create branch gh-pages using jsdoc.
- Documentation More real life testing and examples.