parseNDJSON

Parse a string containing serialized newline-delimited JSON (NDJSON).

Usage

var parseNDJSON = require( '@stdlib/utils/parse-ndjson' );

parseNDJSON( str[, reviver] )

Parses a string as newline-delimited JSON.

var out = parseNDJSON( '{"beep":"boop"}\n{"example":42}' );
// returns [ { 'beep': 'boop' }, { 'example': 42 } ]

To transform the string being parsed, provide a reviver.

function reviver( key, value ) {
    if ( key === '' || key === 'beep' ) {
        return ( typeof value === 'string' ) ? value.toUpperCase() : value;
    }
    return ( typeof value === 'number' ) ? value * 2 : value;
}

var str = '{"beep":"boop"}\n{"value": 20}\n{"numbers": [1,2,3]}';
var out = parseNDJSON( str, reviver );
// returns [ { 'beep' : 'BOOP' }, { 'value': 40 }, { 'numbers': [ 2, 4, 6 ] } ]

Notes

  • In contrast to the native JSON.parse(), this implementation parses string as newline-delimited JSON and returns an array of parsed JSONs.

    var out = JSON.parse( '{"beep":"boop"}\n{"foo":"baz"}' );
    // throws <SyntaxError>
    
    out = parseNDJSON( '{"beep":"boop"}\n{"foo":"baz"}' );
    // returns [ { 'beep': 'boop' }, { 'foo': 'baz' } ]
    
  • In contrast to the native JSON.parse(), this implementation throws a TypeError if provided any value which is not a string.

    var out = JSON.parse( null );
    // returns null
    
    out = parseNDJSON( null );
    // throws <TypeError>
    
  • In contrast to the native JSON.parse(), this implementation does not throw a SyntaxError if unable to parse a string as newline-delimited JSON.

    var out = parseNDJSON( '{"beep":boop}' );
    // returns <SyntaxError>
    
    out = JSON.parse( '{"beep":boop}' );
    // throws <SyntaxError>
    
  • In contrast to the native JSON.parse(), this implementation throws a TypeError if provided a reviver argument which is not a function.

    var out = JSON.parse( '{"a":"b"}', [] );
    // returns { 'a': 'b' }
    
    out = parseNDJSON( '{"a":"b"}', [] );
    // throws <TypeError>
    

Examples

var parseNDJSON = require( '@stdlib/utils/parse-ndjson' );

var out = parseNDJSON( '{"name":"John"}\n{"name":"Doe"}' );
// returns [ { 'name': 'John' }, { 'name': 'Doe' } ]

function reviver( key, value ) {
    if ( key === 'name' ) {
        return value.toUpperCase();
    }
    return value;
}

out = parseNDJSON( '{"name":"John"}\n{"name":"Doe"}', reviver );
// returns [ { 'name': 'JOHN' }, { 'name': 'DOE' } ]

out = parseNDJSON( '{"name":John}\n{"name":Doe}' );
// returns <SyntaxError>

out = parseNDJSON( ' ' );
// returns []

out = parseNDJSON( '{}' );
// returns [ {} ]

out = parseNDJSON( '{"name":"Eve"}\n42\ntrue\n[1,2,3]' );
// returns [ { 'name': 'Eve' }, 42, true, [ 1, 2, 3 ] ]

out = parseNDJSON( '{"name":"John"}\r\n{"name":"Doe"}' );
// returns [ { 'name': 'John' }, { 'name': 'Doe' } ]

out = parseNDJSON( '{"name":"John"}\n{"name":"Doe"}\n' );
// returns [ { 'name': 'John' }, { 'name': 'Doe' } ]
Did you find this page helpful?