yajson-stream
TypeScript icon, indicating that this package has built-in type declarations

1.3.3 • Public • Published

YAJS: Yet Another JSON Streaming Tool

Build Status via Travis CI NPM version Dependency Status via David DM

YAJS is a tool for filtering a portion of json files.

Motivation

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.

Documentation

Head over to Wiki for more information on how to use it.

Example

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 <thiago@elastic.co>'
    });

Command line tool

Call it from a shell:

$ npm install -g yajson-stream
$ cat package.json | yajs '$.author'
"Thiago Souza <thiago@elastic.co>"

YAJS Selector Syntax

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)

Example of ..[<filter keys>]<key>

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"

Example of <key>{<keys filter>}

Given the following json:

[
    {
        "object1": {
            "key1": "value1"
        }
    },
    {
        "object1": {
            "key2": "value1"
        }
    }
]

Will emit only the first object1:

$ cat test.json | yajs '$.object1{key1}'
{"key1":"value1"}

Bugs and Feedback

For bugs, questions and discussions please use the Github Issues.

Acknowledgements

LICENSE

Code and documentation released under The MIT License (MIT).

Dependencies (8)

Dev Dependencies (24)

Package Sidebar

Install

npm i yajson-stream

Weekly Downloads

31

Version

1.3.3

License

MIT

Unpacked Size

133 kB

Total Files

63

Last publish

Collaborators

  • tsouza