YAJS is a tool for filtering a portion of json files.
The reason I built this tool is that I could not find a proper json stream processor with the features I needed without sacrificing speed and memory.
There is a also a benchmark of this tool comparing with oboe.js and JSONStream. See benchmark.
Head over to Wiki for more information on how to use it.
Pipe a text stream of json into YAJS and select 'author' property:
const yajs = require('yajson-stream');
const { createReadStream } = require('fs');
createReadStream('./package.json').
pipe(yajs('$.author')).
on('data', data => {
console.log(data.path); // outputs [ 'author' ]
console.log(data.value); // outputs 'Thiago Souza <[email protected]>'
});
Call it from a shell:
$ npm install -g yajson-stream
$ cat package.json | yajs '$.author'
"Thiago Souza <[email protected]>"
YAJS selector syntax is jsonpath-like, yet it's not jsonpath.
YAJS Selector | Description |
---|---|
$ |
The root object/element |
* |
Wildcard matching all objects/elements regardless |
. |
Child member operator |
.. |
Recursive descendant operator |
..[<path filter>]<key> |
Recursive descendant operator if path filter evaluates to true (see example below) |
<key>{keys filter} |
Will emit only if keys filter evaluates to true. Only supported in the end of the expression (see example below) |
Given the following json:
{
"array": [
{
"key1": {
"child": "value1"
}
},
{
"key2": {
"child": "value2"
}
}
]
}
Select only the second child
entry with:
$ cat test.json | yajs '$..[!key1]child'
"value2"
Given the following json:
[
{
"object1": {
"key1": "value1"
}
},
{
"object1": {
"key2": "value1"
}
}
]
Will emit only the first object1
:
$ cat test.json | yajs '$.object1{key1}'
{"key1":"value1"}
For bugs, questions and discussions please use the Github Issues.
- Thanks to wanglingsong for his awesome work with JsonSurfer which inspired me to create YAJS.
- Thanks to creationix for his crazy fast sax-based json parser.
Code and documentation released under The MIT License (MIT).