YAJL is a low-level sax-like JSON parser developed and maintained by Lloyd Hilaiel.
Node-yajl provides a glue that brings YAJL into Node.js ecosystem. Main feature of this project is a stream JSON parser allowing you to parse data without explicitly delimitting data stream into valid-value chunks.
Node-yajl is forked from yajl-js originally developed by Nikhil Marathe and seems to be no longer maintained.
var yajl = require('yajl');
var h = new yajl.Handle();
h.on( 'error', function (_) { console.debug(_) });
h.on( 'startMap', function ( ) { console.debug('{') });
h.on( 'endMap', function ( ) { console.debug('}') });
h.on( 'startArray', function ( ) { console.debug('[') });
h.on( 'endArray', function ( ) { console.debug(']') });
h.on( 'mapKey', function (_) { console.debug(_+':') });
h.on( 'null', function (_) { console.debug('null')});
h.on( 'boolean', function (_) { console.debug(_) });
h.on( 'string', function (_) { console.debug(_) });
h.on( 'integer', function (_) { console.debug(_) });
h.on( 'double', function (_) { console.debug(_) });
var data = [
'{"some"',
':["JSON',
'"],"data',
'":[-3.5]}'
];
for ( var i in data ) {
h.parse( data[i] );
}
h.completeParse();
Easy mode:
npm install yajl
Build and install manually:
node-waf configure build
node ./test.js
npm install .
Note that this package requires C++ building environment and 'libyajl' at least of version 2 and its dev headers to be installed on target system.
See yajl homepage for details about building and installing 'libyajl'.
Handle
object constructor.
Class Handle
itself is a subclass of events.EventEmitter
.
Optional argument opts
can be passed to constructor.
When opts
is ommited or null
, these defaults are used:
{
allowComments : false,
dontValidateStrings : false,
allowTrailingGarbage : false,
allowMultipleValues : false,
allowPartialValues : false
}
Parse a data chunk possibly raising number of events.
Parse any ramaining buffered data.
Because of yajl
's stream nature it can't sometimes determine when the recently
parsed data contains a valid JSON value or there need more data (e.g. when parsing numeric values).
So it's a good idea to call this method every time you reach the end of data stream.
Get the amount of data consumed from the last chunk passed to handle
.
In the case of a successful parse this can help you understand if the entire buffer was consumed or not.
- 'startMap'
- 'endMap'
- 'startArray'
- 'endArray'
- 'mapKey'
- 'null'
- 'boolean'
- 'integer'
- 'double'
- 'number'
- 'string'
Modified BSD Lincense. See 'LICENSE' file for details.