jsonparser2
is in an early pre-release state.
Please don't use it in productive applications!
Streaming JSON parser.
npm install @jfhr/jsonparser2
Works in node.js and in the browser!
jsonparser2
has a callback-based API. You can find more callbacks below!
import { JsonParser } from 'jsonparser2';
const parser = new JsonParser({
onobjectstart() {
console.log("Here we go...");
},
onkey(key) {
console.log("Got a key: " + key);
},
onstring(value) {
console.log("Got a value: " + value);
},
});
parser.write('{"hel');
parser.write('lo": "world"}');
parser.end();
Output:
Here we go...
Got a key: hello
Got a value: world
import * as https from 'https';
import { JsonParser } from 'jsonparser2';
const parser = new JsonParser({
// Your callbacks here...
});
await new Promise((resolve, reject) => {
https.get('https://jfhr.de/jsonparser2/Q2063.json', res => {
res.setEncoding('utf-8'); // or another encoding
res.on('error', reject);
res.on('data', chunk => parser.write(decoder.write(chunk)));
res.on('close', () => {
parser.end(decoder.end());
resolve();
});
});
});
import { StringDecoder } from "string_decoder";
import { JsonParser } from 'jsonparser2';
const parser = new JsonParser({
// Your callbacks here...
});
const response = await fetch('https://jfhr.de/jsonparser2/Q2063.json');
const decoder = new StringDecoder('utf-8'); // or another encoding
for await (const chunk of response) {
parser.write(decoder.write(chunk));
}
parser.write(decoder.end());
parser.end();
You can create a subclass of JsonParser
if you want. In your class constructor, call super()
and pass
your callbacks as a parameter. Note that you need to use the arrow syntax if you want to access instance variables
from your callbacks.
class P1163Parser extends JsonParser {
private isP1163 = false;
private isP1163Value = false;
constructor() {
super({
onkey: key => {
if (key === 'P1163') {
this.isP1163 = true;
}
if (this.isP1163 && key === 'value') {
this.isP1163Value = true;
}
},
onstring: value => {
if (this.isP1163Value) {
let result = value;
console.log('found:', result);
}
}
});
}
}
const parser = new P1163Parser();
Inside all callbacks you can use this
to refer to the parser itself, e.g.
call this.end()
to finish parsing when you find a specific value.
If you use this.write()
inside a callback, make sure you don't cause an infinite loop!
Called when the start of an object is encountered.
Called when the end of an object is encountered.
Called when the start of an array is encountered.
Called when the end of an array is encountered.
Called when an object key is encountered. The key is passed as a parameter.
Called when a string value is encountered. The value is passed as a parameter.
Called when a numeric value is encountered. The value is passed as a parameter.
Called when a boolean value is encountered. The value is passed as a parameter.
Called when a null value is encountered.
Creates a new parser with the given callbacks. All callbacks are optional.
Write the string text
to the parser. text
must be part of a valid JSON string,
otherwise the behavior is undefined!
Close the parser and stop processing. Subsequent calls to write()
and end()
will be
ignored.