Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alemures/fast-json
A lightning fast on the fly JSON parser
https://github.com/alemures/fast-json
fast json json-parser nodejs performance
Last synced: 14 days ago
JSON representation
A lightning fast on the fly JSON parser
- Host: GitHub
- URL: https://github.com/alemures/fast-json
- Owner: alemures
- Created: 2016-08-05T00:11:04.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2023-03-12T21:29:56.000Z (over 1 year ago)
- Last Synced: 2024-10-31T11:04:49.036Z (18 days ago)
- Topics: fast, json, json-parser, nodejs, performance
- Language: TypeScript
- Homepage:
- Size: 20.8 MB
- Stars: 127
- Watchers: 2
- Forks: 10
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
# 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-json
```## Usage
```javascript
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))
``````javascript
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();
});
``````javascript
// 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.