npm install json-pull-parserJSONPullParser
--------------
Introduction
JSONPullParser is a dropin replacement for JSON.parse and also provides a
pull based api.
Usage
``javascript
let parser = new JSONPullParser(json);
let builder = new JSONPullParser.ObjectBuilder();
for (let token of parser) builder.handle(token);
`
See live demo!
JSONPullParser provides a simple API for iterating over the tokens in
JSON data.
If your JavaScript engine supports Symbol.iterator
then your parser is iterable.
`javascript
let parser = new JSONPullParser(json);
for (let token of parser) {
// use token
}
`
Otherwise you have to get an iterator from parser.tokens()
`javascript
var parser = new JSONPullParser(json);
var it = parser.tokens();
while (true) {
var step = it.next();
if (step.done) break;
var token = step.value;
// use token
}
`
JSONPullParser ensures that the tokens are valid and delivered in a validStartObject
sequence. and StartArray will always have a matching EndObjectEndArray
and at the correct depth.
Node (CommonJS)
`sh`
$ npm install json-pull-parser
`javascript`
const JSONPullParser = require('json-pull-parser')
Browser
`html`
ObjectBuilder builds the resulting JavaScript object from the tokens. Itsvalue property is either undefined or a valid object/array/boolean or null.
JSON.parse could be implemented by simply feeding all the tokens toObjectBuilder.
`javascript`
JSON.parse = function (source)
{
let parser = new JSONPullParser(source);
let builder = new JSONPullParser.ObjectBuilder();
for (let token of parser) builder.handle(token);
return builder.value;
}
`javascript
let parser = new JSONPullParser(json);
for (let token of parser) {
switch (token.type) {
case JSONPullParser.StartObject:
break;
case JSONPullParser.EndObject:
break;
case JSONPullParser.StartArray:
break;
case JSONPullParser.EndArray:
break;
case JSONPullParser.String:
break;
case JSONPullParser.Number:
break;
case JSONPullParser.TrueLiteral:
break;
case JSONPullParser.FalseLiteral:
break;
case JSONPullParser.NullLiteral:
break;
case JSONPullParser.Error:
break;
}
}
`
JSONPullParser tries to conform to ECMA 404.
JSON-Schema-Test-Suite
and JSON_checker are both used to validate
the parser as well as comparing the output from JSON.parse withJSONPullParser.parse on a number of real life testcases.
JSONPullParser currently delegates string and number parsing is delegated toJSON.parse.
JSONPullParser will obviously be slower than using native JSON.parse`.
However it is mainly intended to be used when a constant frame rate or not
freezing the user interface is more important than performance.
json.length: 17.53mb
JSON.parse: 188ms
JSONPullParser.parse: 316ms
Equality: true
JSON.parse done in 170ms
JSON.parse done in 184ms
JSONPullParser parsed 1M tokens in 480ms using 1001 fragments
JSONPullParser parsed 1M tokens in 396ms using 1001 fragments
See live demo!