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 parsesstring
asnewline-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 astring
.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' } ]