0.7.2 • Published 2 years ago

json-kit v0.7.2

Weekly downloads
10
License
MIT
Repository
github
Last release
2 years ago

JSON Kit

JSON stringify(), parse() and more in pure JS.

TOC

JSON stringify

basic test.

var stringify = json.stringifier( {} ) ;

testStringifyEq( stringify , undefined ) ;
testStringifyEq( stringify , null ) ;
testStringifyEq( stringify , true ) ;
testStringifyEq( stringify , false ) ;

testStringifyEq( stringify , 0 ) ;
testStringifyEq( stringify , 0.0000000123 ) ;
testStringifyEq( stringify , -0.0000000123 ) ;
testStringifyEq( stringify , 1234 ) ;
testStringifyEq( stringify , -1234 ) ;
testStringifyEq( stringify , NaN ) ;
testStringifyEq( stringify , Infinity ) ;
testStringifyEq( stringify , - Infinity ) ;

testStringifyEq( stringify , '' ) ;
testStringifyEq( stringify , '0' ) ;
testStringifyEq( stringify , '1' ) ;
testStringifyEq( stringify , '123' ) ;
testStringifyEq( stringify , 'A' ) ;
testStringifyEq( stringify , 'ABC' ) ;
testStringifyEq( stringify , '\ta"b"c\n\rAB\tC\né~\'#&|_\\-ł"»¢/æ//nĸ^' ) ;
testStringifyEq( stringify , '\t\v\x00\x01\x7f\x1fa\x7fa' ) ;

testStringifyEq( stringify , {} ) ;
testStringifyEq( stringify , {a:1,b:'2'} ) ;
testStringifyEq( stringify , {a:1,b:'2',c:true,d:null,e:undefined} ) ;
testStringifyEq( stringify , {a:1,b:'2',sub:{c:true,d:null,e:undefined,sub:{f:''}}} ) ;

testStringifyEq( stringify , [] ) ;
testStringifyEq( stringify , [1,'2'] ) ;
testStringifyEq( stringify , [1,'2',[null,undefined,true]] ) ;

testStringifyEq( stringify , require( '../sample/sample1.json' ) ) ;
testStringifyEq( stringify , require( '../sample/stringFlatObject.js' ) ) ;

// Investigate why it does not work
//testStringifyEq( stringify , require( '../sample/garbageStringObject.js' ) ) ;

depth limit.

var stringify = json.stringifier( { depth: 2 } ) ;

var o = {
	a: 1,
	b: 2,
	c: {
		d: 4,
		e: 5
	}
} ;

expect( stringify( o , 1 ) ).to.be( '{"a":1,"b":2,"c":null}' ) ;
expect( stringify( o , 2 ) ).to.be( '{"a":1,"b":2,"c":{"d":4,"e":5}}' ) ;
expect( stringify( o ) ).to.be( '{"a":1,"b":2,"c":{"d":4,"e":5}}' ) ;

var a = {
	k1: 1,
	k2: 2
} ;

var b = {
	k4: 1,
	k5: 2
} ;

a.k3 = b ;
b.k6 = a ;

o = {
	a: a,
	b: b
} ;

expect( stringify( a ) ).to.be( '{"k1":1,"k2":2,"k3":{"k4":1,"k5":2,"k6":null}}' ) ;
expect( stringify( a , 2 ) ).to.be( '{"k1":1,"k2":2,"k3":{"k4":1,"k5":2,"k6":null}}' ) ;
expect( stringify( a , 3 ) ).to.be( '{"k1":1,"k2":2,"k3":{"k4":1,"k5":2,"k6":{"k1":1,"k2":2,"k3":null}}}' ) ;
expect( stringify( a , 4 ) ).to.be( '{"k1":1,"k2":2,"k3":{"k4":1,"k5":2,"k6":{"k1":1,"k2":2,"k3":{"k4":1,"k5":2,"k6":null}}}}' ) ;

expect( stringify( o ) ).to.be( '{"a":{"k1":1,"k2":2,"k3":null},"b":{"k4":1,"k5":2,"k6":null}}' ) ;
expect( stringify( o , 2 ) ).to.be( '{"a":{"k1":1,"k2":2,"k3":null},"b":{"k4":1,"k5":2,"k6":null}}' ) ;
expect( stringify( o , 3 ) ).to.be( '{"a":{"k1":1,"k2":2,"k3":{"k4":1,"k5":2,"k6":null}},"b":{"k4":1,"k5":2,"k6":{"k1":1,"k2":2,"k3":null}}}' ) ;
expect( stringify( o , 4 ) ).to.be( '{"a":{"k1":1,"k2":2,"k3":{"k4":1,"k5":2,"k6":{"k1":1,"k2":2,"k3":null}}},"b":{"k4":1,"k5":2,"k6":{"k1":1,"k2":2,"k3":{"k4":1,"k5":2,"k6":null}}}}' ) ;

document depth limit (roots-db compatible).

var stringify = json.stringifier( { documentDepth: 2 } ) ;

var o = {
	a: 1,
	b: 2,
	c: {
		d: 4,
		e: 5
	}
} ;

Object.defineProperty( o , '$' , { value: {} } ) ;

expect( stringify( o , 1 ) ).to.be( '{"a":1,"b":2,"c":{"d":4,"e":5}}' ) ;
expect( stringify( o , 2 ) ).to.be( '{"a":1,"b":2,"c":{"d":4,"e":5}}' ) ;
expect( stringify( o ) ).to.be( '{"a":1,"b":2,"c":{"d":4,"e":5}}' ) ;

Object.defineProperty( o.c , '$' , { value: {} } ) ;

expect( stringify( o , 1 ) ).to.be( '{"a":1,"b":2,"c":null}' ) ;
expect( stringify( o , 2 ) ).to.be( '{"a":1,"b":2,"c":{"d":4,"e":5}}' ) ;
expect( stringify( o ) ).to.be( '{"a":1,"b":2,"c":{"d":4,"e":5}}' ) ;

var a = {
	k1: 1,
	k2: 2
} ;

var b = {
	k4: 1,
	k5: 2
} ;

a.k3 = b ;
b.k6 = a ;

o = {
	a: a,
	b: b
} ;

Object.defineProperty( o , '$' , { value: {} } ) ;
Object.defineProperty( a , '$' , { value: {} } ) ;
Object.defineProperty( b , '$' , { value: {} } ) ;

expect( stringify( a ) ).to.be( '{"k1":1,"k2":2,"k3":{"k4":1,"k5":2,"k6":null}}' ) ;
expect( stringify( a , 2 ) ).to.be( '{"k1":1,"k2":2,"k3":{"k4":1,"k5":2,"k6":null}}' ) ;
expect( stringify( a , 3 ) ).to.be( '{"k1":1,"k2":2,"k3":{"k4":1,"k5":2,"k6":{"k1":1,"k2":2,"k3":null}}}' ) ;
expect( stringify( a , 4 ) ).to.be( '{"k1":1,"k2":2,"k3":{"k4":1,"k5":2,"k6":{"k1":1,"k2":2,"k3":{"k4":1,"k5":2,"k6":null}}}}' ) ;

expect( stringify( o ) ).to.be( '{"a":{"k1":1,"k2":2,"k3":null},"b":{"k4":1,"k5":2,"k6":null}}' ) ;
expect( stringify( o , 2 ) ).to.be( '{"a":{"k1":1,"k2":2,"k3":null},"b":{"k4":1,"k5":2,"k6":null}}' ) ;
expect( stringify( o , 3 ) ).to.be( '{"a":{"k1":1,"k2":2,"k3":{"k4":1,"k5":2,"k6":null}},"b":{"k4":1,"k5":2,"k6":{"k1":1,"k2":2,"k3":null}}}' ) ;
expect( stringify( o , 4 ) ).to.be( '{"a":{"k1":1,"k2":2,"k3":{"k4":1,"k5":2,"k6":{"k1":1,"k2":2,"k3":null}}},"b":{"k4":1,"k5":2,"k6":{"k1":1,"k2":2,"k3":{"k4":1,"k5":2,"k6":null}}}}' ) ;

circular ref notation.

var stringify = json.stringifier( { circularRefNotation: true } ) ;

var a = {
	k1: 1,
	k2: 2
} ;

var b = {
	k4: 1,
	k5: 2
} ;

a.k3 = b ;
b.k6 = a ;

var o = {
	a: a,
	b: b
} ;

expect( stringify( a ) ).to.be( '{"k1":1,"k2":2,"k3":{"k4":1,"k5":2,"k6":{"@@ref@@":-2}}}' ) ;
expect( stringify( o ) ).to.be( '{"a":{"k1":1,"k2":2,"k3":{"k4":1,"k5":2,"k6":{"@@ref@@":-2}}},"b":{"k4":1,"k5":2,"k6":{"k1":1,"k2":2,"k3":{"@@ref@@":-2}}}}' ) ;

unique ref notation.

var stringify = json.stringifier( { uniqueRefNotation: true } ) ;

var a = {
	k1: 1,
	k2: 2
} ;

var b = {
	k4: 1,
	k5: 2
} ;

a.k3 = b ;
b.k6 = a ;

var o = {
	a: a,
	b: b
} ;

expect( stringify( a ) ).to.be( '{"k1":1,"k2":2,"k3":{"k4":1,"k5":2,"k6":{"@@ref@@":[]}}}' ) ;
expect( stringify( o ) ).to.be( '{"a":{"k1":1,"k2":2,"k3":{"k4":1,"k5":2,"k6":{"@@ref@@":["a"]}}},"b":{"@@ref@@":["a","k3"]}}' ) ;

property masks.

var stringify = json.stringifier( { propertyMask: true } ) ;
var o , mask ;

o = {
	a: 'A',
	b: 2,
	c: 'three',
	sub: {
		d: 'dee!',
		f: 5,
		sub: {
			g: 'gee'
		},
		array: [
			{
				title: 'One two',
				text: 'blah'
			} ,
			{
				title: 'You should know that!',
				text: 'blah'
			} ,
			{
				title: '10 things about nothing',
				text: 'blah blih'
			}
		]
	}
} ;

mask = {
	a: true ,
	sub: {
		f: true ,
		sub: {
			g: true
		} ,
		array: {
			title: true
		}
	}
} ;

expect( stringify( o , mask ) ).to.be( '{"a":"A","sub":{"f":5,"sub":{"g":"gee"},"array":[{"title":"One two"},{"title":"You should know that!"},{"title":"10 things about nothing"}]}}' ) ;

mask = {
	a: true ,
	sub: {
		f: true ,
		sub: true ,
		array: true
	}
} ;

expect( stringify( o , mask ) ).to.be( '{"a":"A","sub":{"f":5,"sub":{"g":"gee"},"array":[{"title":"One two","text":"blah"},{"title":"You should know that!","text":"blah"},{"title":"10 things about nothing","text":"blah blih"}]}}' ) ;

indentation.

var stringify = json.stringifier( { indent: '    ' } ) ;

var o = {
	a: 1,
	b: {
		c: 3,
		d: 4,
		e: {
			f: 6,
			g: 7
		}
	} ,
	h: {
		i: 9,
		j: 10
	} ,
	k: [ 'a' , 'b' , 'c' , true , false , null , [ 0 , 1 , 2 , 3 ] , {} , [] ] ,
	i: {} ,
	j: []
} ;

//console.log( "JSON - pretty print:\n" + stringify( o ) ) ;
expect( stringify( o ) ).to.be( '{\n    "a": 1,\n    "b": {\n        "c": 3,\n        "d": 4,\n        "e": {\n            "f": 6,\n            "g": 7\n        }\n    },\n    "h": {\n        "i": 9,\n        "j": 10\n    },\n    "k": [\n        "a",\n        "b",\n        "c",\n        true,\n        false,\n        null,\n        [\n            0,\n            1,\n            2,\n            3\n        ],\n        {},\n        []\n    ],\n    "i": {},\n    "j": []\n}' ) ;

JSON parse

basic test.

var parse = json.parser( {} ) ;

testParseEq( parse , 'null' ) ;
testParseEq( parse , 'true' ) ;
testParseEq( parse , 'false' ) ;

testParseEq( parse , '0' ) ;
testParseEq( parse , '1' ) ;
testParseEq( parse , '123' ) ;
testParseEq( parse , '-123' ) ;
testParseEq( parse , '123.456' ) ;
testParseEq( parse , '-123.456' ) ;
testParseEq( parse , '0.123' ) ;
testParseEq( parse , '-0.123' ) ;
testParseEq( parse , '0.00123' ) ;
testParseEq( parse , '-0.00123' ) ;

testParseEq( parse , '""' ) ;
testParseEq( parse , '"abc"' ) ;
testParseEq( parse , '"abc\\"def"' ) ;
testParseEq( parse , '"abc\\ndef\\tghi\\rjkl"' ) ;
testParseEq( parse , '"abc\\u0000\\u007f\\u0061def\\"\\"jj"' ) ;

testParseEq( parse , '{}' ) ;
testParseEq( parse , '{"a":1}' ) ;
testParseEq( parse , '{"a":1,"b":"string","c":"","d":null,"e":true,"f":false}' ) ;
testParseEq( parse , '{"a":1,"b":"string","c":"","d":null,"e":true,"f":false,"sub":{"g":123,"h":{},"i":{"j":"J!"}}}' ) ;

testParseEq( parse , '[]' ) ;
testParseEq( parse , '[1,2,3]' ) ;
testParseEq( parse , '[-12,1.5,"toto",true,false,null,0.3]' ) ;
testParseEq( parse , '[-12,1.5,"toto",true,false,null,0.3,[1,2,3],[4,5,6]]' ) ;

testParseEq( parse , '{"a":1,"b":"string","c":"","d":null,"e":true,"f":false,"sub":{"g":123,"h":[1,2,3],"i":["j","J!"]}}' ) ;
testParseEq( parse , '[-12,1.5,"toto",{"g":123,"h":[1,2,3],"i":["j","J!"]},true,false,null,0.3,[1,2,3],[4,5,6]]' ) ;

testParseEq( parse , ' { "a" :   1 , "b":  \n"string",\n  "c":"" \t,\n\t"d" :   null,"e":true,   "f"   :   false  , "sub":{"g":123,"h":[1,2,3],"i":["j","J!"]}}' ) ;

testParseEq( parse , fs.readFileSync( __dirname + '/../sample/sample1.json' ).toString() ) ;

depth limit.

var parse = json.parser( { depth: 2 } ) ;

var oJson ;

oJson = '{"a":1,"b":2,"c":{"d":4,"e":5},"f":6}' ;
expect( parse( oJson , 1 ) ).to.eql( {a:1,b:2,c:undefined,f:6} ) ;
expect( parse( oJson , 2 ) ).to.eql( {a:1,b:2,c:{d:4,e:5},f:6} ) ;
expect( parse( oJson ) ).to.eql( {a:1,b:2,c:{d:4,e:5},f:6} ) ;

oJson = '{"a":1,"b":2,"c":{"nasty\\n\\"key}}]][{":"nasty[value{}}}]]"},"f":6}' ;
expect( json.parser( { depth: 1 } )( oJson ) ).to.eql( {a:1,b:2,c:undefined,f:6} ) ;

circular ref notation.

var parse = json.parser( { refNotation: true } ) ;

var aJson = '{"k1":1,"k2":2,"k3":{"k4":1,"k5":2,"k6":{"@@ref@@":-2}}}' ;
var oJson = '{"a":{"k1":1,"k2":2,"k3":{"k4":1,"k5":2,"k6":{"@@ref@@":-2}}},"b":{"k4":1,"k5":2,"k6":{"k1":1,"k2":2,"k3":{"@@ref@@":-2}}}}' ;

var a = {
	k1: 1,
	k2: 2
} ;

var b = {
	k4: 1,
	k5: 2
} ;

a.k3 = b ;
b.k6 = a ;

var o = {
	a: a,
	b: b
} ;

var aParsed = parse( aJson ) ;
expect( aParsed ).to.only.have.keys( [ 'k1' , 'k2' , 'k3' ] ) ;
expect( aParsed.k1 ).to.be( 1 ) ;
expect( aParsed.k2 ).to.be( 2 ) ;
expect( aParsed.k3 ).to.only.have.keys( [ 'k4' , 'k5' , 'k6' ] ) ;
expect( aParsed.k3.k4 ).to.be( 1 ) ;
expect( aParsed.k3.k5 ).to.be( 2 ) ;
expect( aParsed.k3.k6 ).to.be( aParsed ) ;

var oParsed = parse( oJson ) ;
expect( oParsed ).to.only.have.keys( [ 'a' , 'b' ] ) ;
expect( oParsed.a ).to.only.have.keys( [ 'k1' , 'k2' , 'k3' ] ) ;
expect( oParsed.a.k1 ).to.be( 1 ) ;
expect( oParsed.a.k2 ).to.be( 2 ) ;
expect( oParsed.b ).to.only.have.keys( [ 'k4' , 'k5' , 'k6' ] ) ;
expect( oParsed.b.k4 ).to.be( 1 ) ;
expect( oParsed.b.k5 ).to.be( 2 ) ;
expect( oParsed.a.k3.k6 ).to.be( oParsed.a ) ;
expect( oParsed.b.k6.k3 ).to.be( oParsed.b ) ;

unique ref notation.

var parse = json.parser( { refNotation: true } ) ;

var aJson = '{"k1":1,"k2":2,"k3":{"k4":1,"k5":2,"k6":{"@@ref@@":[]}}}' ;
var oJson = '{"a":{"k1":1,"k2":2,"k3":{"k4":1,"k5":2,"k6":{"@@ref@@":["a"]}}},"b":{"@@ref@@":["a","k3"]}}' ;

var a = {
	k1: 1,
	k2: 2
} ;

var b = {
	k4: 1,
	k5: 2
} ;

a.k3 = b ;
b.k6 = a ;

var o = {
	a: a,
	b: b
} ;

var aParsed = parse( aJson ) ;
//console.log( '\n\naParsed:' , aParsed ) ;
expect( aParsed ).to.only.have.keys( [ 'k1' , 'k2' , 'k3' ] ) ;
expect( aParsed.k1 ).to.be( 1 ) ;
expect( aParsed.k2 ).to.be( 2 ) ;
expect( aParsed.k3 ).to.only.have.keys( [ 'k4' , 'k5' , 'k6' ] ) ;
expect( aParsed.k3.k4 ).to.be( 1 ) ;
expect( aParsed.k3.k5 ).to.be( 2 ) ;
expect( aParsed.k3.k6 ).to.be( aParsed ) ;

//console.log( "\n\n" ) ;

var oParsed = parse( oJson ) ;
//console.log( '\n\noParsed:' , oParsed ) ;
expect( oParsed ).to.only.have.keys( [ 'a' , 'b' ] ) ;
expect( oParsed.a ).to.only.have.keys( [ 'k1' , 'k2' , 'k3' ] ) ;
expect( oParsed.a.k1 ).to.be( 1 ) ;
expect( oParsed.a.k2 ).to.be( 2 ) ;
expect( oParsed.b ).to.only.have.keys( [ 'k4' , 'k5' , 'k6' ] ) ;
expect( oParsed.b.k4 ).to.be( 1 ) ;
expect( oParsed.b.k5 ).to.be( 2 ) ;
expect( oParsed.a.k3.k6 ).to.be( oParsed.a ) ;
expect( oParsed.b.k6.k3 ).to.be( oParsed.b ) ;

expect( oParsed.a.k3 ).to.be( oParsed.b ) ;
expect( oParsed.b.k6 ).to.be( oParsed.a ) ;

JSON stringify + parse with the ref notation

big test.

var stringify = json.stringifier( { uniqueRefNotation: true } ) ;
var parse = json.parser( { refNotation: true } ) ;

var sample = require( '../sample/sample1.json' ) ;
var sampleJson = JSON.stringify( sample ) ;

var o = {
	a: sample ,
	b: {
		c: "some data",
		d: sample
	} ,
	e: "some data",
	f: {
		g: [ "some data" , sample , "some data" , sample ]
	}
} ;

var json1 = stringify( o ) ;

expect( json1 ).to.be(
	'{"a":' + sampleJson + ',"b":{"c":"some data","d":{"@@ref@@":["a"]}},"e":"some data","f":{"g":["some data",{"@@ref@@":["a"]},"some data",{"@@ref@@":["a"]}]}}'
) ;

var r = parse( json1 ) ;
expect( r ).to.eql( o ) ;
expect( r.b.d ).to.be( r.a ) ;
expect( r.f.g[ 1 ] ).to.be( r.a ) ;
expect( r.f.g[ 3 ] ).to.be( r.a ) ;


// Test ref to an array
o = {
	a: [ "one" , 2 , sample , 4 , sample ] ,
	b: {
		c: "some data",
		d: sample
	} ,
	e: "some data",
	f: {
		g: [ "some data" , sample , "some data" , sample ]
	}
} ;

var json2 = stringify( o ) ;

expect( json2 ).to.be(
	'{"a":["one",2,' + sampleJson + ',4,{"@@ref@@":["a",2]}],"b":{"c":"some data","d":{"@@ref@@":["a",2]}},"e":"some data","f":{"g":["some data",{"@@ref@@":["a",2]},"some data",{"@@ref@@":["a",2]}]}}'
) ;

r = parse( json2 ) ;
expect( r ).to.eql( o ) ;
expect( r.a[ 2 ] ).to.be( r.b.d ) ;
expect( r.a[ 4 ] ).to.be( r.b.d ) ;
expect( r.f.g[ 1 ] ).to.be( r.b.d ) ;
expect( r.f.g[ 3 ] ).to.be( r.b.d ) ;

stringifyStream()

empty input stream should output a stream of an empty array.

var stringify = json.stringifier( {} ) ;
var stream = json.stringifyStream( { stringifier: stringify } ) ;
var str = '' ;

stream.on( 'data' , function( data ) {
	str += data.toString() ;
} ) ;

stream.on( 'end' , function( data ) {
	expect( str ).to.be( '[]' ) ;
	done() ;
} ) ;

stream.end() ;

when the input stream push some object, the output stream should push an array of object.

var stringify = json.stringifier( {} ) ;
var stream = json.stringifyStream( { stringifier: stringify } ) ;
var str = '' ;

stream.on( 'data' , function( data ) {
	str += data.toString() ;
} ) ;

stream.on( 'end' , function( data ) {
	expect( str ).to.be( '[{"a":1,"b":2,"c":"C"},{"toto":"titi"}]' ) ;
	done() ;
} ) ;

stream.write( { a: 1 , b: 2 , c: 'C' } ) ;
stream.write( { toto: "titi" } ) ;
stream.end() ;

parseStream()

empty stream (i.e.: "[]").

var parse = json.parser( {} ) ;
var stream = json.parseStream( { parser: parse } ) ;
var array = [] ;

stream.on( 'data' , function( data ) {
	//console( "Received " + ( typeof data ) + ':' , data ) ;
	array.push( data ) ;
} ) ;

stream.on( 'end' , function( data ) {
	expect( array ).to.eql( [] ) ;
	//console.log( '\n\n>>>>> DONE!\n\n' ) ;
	done() ;
} ) ;

stream.write( '[]' ) ;
stream.end() ;

single object in one write.

var parse = json.parser( {} ) ;
var stream = json.parseStream( { parser: parse } ) ;
var array = [] ;

stream.on( 'data' , function( data ) {
	//console( "Received " + ( typeof data ) + ':' , data ) ;
	array.push( data ) ;
} ) ;

stream.on( 'end' , function( data ) {
	expect( array ).to.eql( [
		{ a: 1, b: 2, c: 'C' }
	] ) ;
	//console.log( '\n\n>>>>> DONE!\n\n' ) ;
	done() ;
} ) ;

stream.write( '[ { "a": 1 , "b": 2 , "c": "C" } ]' ) ;
stream.end() ;

single string in one write.

var parse = json.parser( {} ) ;
var stream = json.parseStream( { parser: parse } ) ;
var array = [] ;

stream.on( 'data' , function( data ) {
	//console( "Received " + ( typeof data ) + ':' , data ) ;
	array.push( data ) ;
} ) ;

stream.on( 'end' , function( data ) {
	expect( array ).to.eql( [ "nasty string, with comma, inside" ] ) ;
	//console.log( '\n\n>>>>> DONE!\n\n' ) ;
	done() ;
} ) ;

stream.write( '[ "nasty string, with comma, inside" ]' ) ;
stream.end() ;

single object in two write.

var parse = json.parser( {} ) ;
var stream = json.parseStream( { parser: parse } ) ;
var array = [] ;

stream.on( 'data' , function( data ) {
	//console( "Received " + ( typeof data ) + ':' , data ) ;
	array.push( data ) ;
} ) ;

stream.on( 'end' , function( data ) {
	expect( array ).to.eql( [
		{ a: 1, b: 2, c: 'C' }
	] ) ;
	//console.log( '\n\n>>>>> DONE!\n\n' ) ;
	done() ;
} ) ;

stream.write( '[ { "a": 1 , "b' ) ;
stream.write( '": 2 , "c": "C" } ]' ) ;
stream.end() ;

single object in multiple write.

var parse = json.parser( {} ) ;
var stream = json.parseStream( { parser: parse } ) ;
var array = [] ;

stream.on( 'data' , function( data ) {
	//console( "Received " + ( typeof data ) + ':' , data ) ;
	array.push( data ) ;
} ) ;

stream.on( 'end' , function( data ) {
	expect( array ).to.eql( [
		{ a: 1, b: 2, c: 'C' }
	] ) ;
	//console.log( '\n\n>>>>> DONE!\n\n' ) ;
	done() ;
} ) ;

stream.write( '   ' ) ;
stream.write( '  \n ' ) ;
stream.write( '  \n [ ' ) ;
stream.write( '{ "a": ' ) ;
stream.write( ' 1 , "b' ) ;
stream.write( '": 2 , "' ) ;
stream.write( 'c": "C" }' ) ;
stream.write( '  ] ' ) ;
stream.write( '  ' ) ;
stream.end() ;

multiple objects in one write.

var parse = json.parser( {} ) ;
var stream = json.parseStream( { parser: parse } ) ;
var array = [] ;

stream.on( 'data' , function( data ) {
	//console( "Received " + ( typeof data ) + ':' , data ) ;
	array.push( data ) ;
} ) ;

stream.on( 'end' , function( data ) {
	expect( array ).to.eql( [
		{ a: 1, b: 2, c: 'C' } ,
		{ one: 1 } ,
		[ "two" , "three" ] ,
		true ,
		false ,
		undefined
	] ) ;
	//console.log( '\n\n>>>>> DONE!\n\n' ) ;
	done() ;
} ) ;

stream.write( '[{"a":1,"b":2,"c":"C"},{"one":1},[ "two" , "three" ] , true , false , null ]' ) ;
stream.end() ;

multiple objects in many write.

var parse = json.parser( {} ) ;
var stream = json.parseStream( { parser: parse } ) ;
var array = [] ;

stream.on( 'data' , function( data ) {
	//console( "Received " + ( typeof data ) + ':' , data ) ;
	array.push( data ) ;
} ) ;

stream.on( 'end' , function( data ) {
	expect( array ).to.eql( [
		{ a: 1, b: 2, c: 'C' } ,
		{ one: 1 } ,
		[ "two" , "three" ] ,
		true ,
		false ,
		undefined
	] ) ;
	//console.log( '\n\n>>>>> DONE!\n\n' ) ;
	done() ;
} ) ;

stream.write( '   ' ) ;
stream.write( '  \n ' ) ;
stream.write( '  \n [{ ' ) ;
stream.write( '"a":1' ) ;
stream.write( ',"b":2,' ) ;
stream.write( '"c":"C"}' ) ;
stream.write( ',' ) ;
stream.write( '{"one":1},[ "tw' ) ;
stream.write( 'o" , "thr' ) ;
stream.write( 'ee" ] , tr' ) ;
stream.write( 'ue , false , ' ) ;
stream.write( 'n' ) ;
stream.write( 'u' ) ;
stream.write( 'll ]' ) ;
stream.write( ' \n ' ) ;
stream.end() ;

multiple objects in many write with nasty strings.

var parse = json.parser( {} ) ;
var stream = json.parseStream( { parser: parse } ) ;
var array = [] ;

stream.on( 'data' , function( data ) {
	//console( "Received " + ( typeof data ) + ':' , data ) ;
	array.push( data ) ;
} ) ;

stream.on( 'end' , function( data ) {
	expect( array ).to.eql( [
		{ a: '  "  }  ', b: 2, c: '  C{[' } ,
		{ one: 1 } ,
		[ '  tw"}"}o' , '\\"thr\\ee\n' ] ,
		true ,
		false ,
		undefined
	] ) ;
	//console.log( '\n\n>>>>> DONE!\n\n' ) ;
	done() ;
} ) ;

stream.write( '   ' ) ;
stream.write( '  \n ' ) ;
stream.write( '  \n [{ ' ) ;
stream.write( '"a":"  \\"  }  "' ) ;
stream.write( ',"b":2,' ) ;
stream.write( '"c":"  C{["}' ) ;
stream.write( ',' ) ;
stream.write( '{"one":1},[ "  tw\\"}' ) ;
stream.write( '\\"}o" , "\\\\\\"thr\\\\' ) ;
stream.write( 'ee\\n" ] , tr' ) ;
stream.write( 'ue , false , ' ) ;
stream.write( 'n' ) ;
stream.write( 'u' ) ;
stream.write( 'll ]' ) ;
stream.write( ' \n ' ) ;
stream.end() ;
0.7.2

2 years ago

0.7.1

2 years ago

0.7.0

2 years ago

0.6.6

2 years ago

0.6.5

4 years ago

0.6.4

4 years ago

0.6.3

5 years ago

0.6.2

5 years ago

0.6.1

5 years ago

0.6.0

5 years ago

0.5.4

6 years ago

0.5.3

6 years ago

0.5.2

7 years ago

0.5.0

7 years ago

0.4.5

8 years ago

0.4.4

8 years ago

0.4.3

8 years ago

0.4.2

8 years ago

0.4.1

8 years ago

0.4.0

8 years ago

0.3.6

8 years ago

0.3.5

8 years ago

0.3.4

8 years ago

0.3.3

8 years ago

0.3.2

8 years ago

0.3.1

8 years ago

0.3.0

8 years ago

0.2.4

8 years ago

0.2.3

8 years ago

0.2.2

8 years ago

0.2.0

8 years ago

0.1.8

8 years ago

0.1.7

8 years ago

0.1.6

8 years ago

0.1.4

8 years ago

0.1.5

8 years ago

0.1.3

8 years ago

0.1.2

8 years ago

0.1.1

8 years ago

0.1.0

8 years ago