Nostradamus Prophecy Machine

    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).

    Keywords

    Install

    npm i yajson-stream

    DownloadsWeekly Downloads

    71

    Version

    1.3.3

    License

    MIT

    Unpacked Size

    133 kB

    Total Files

    63

    Last publish

    Collaborators

    • tsouza