Transforms JSON stream to JS Objects
$ npm install '@oresoftware/json-stream-parser'
import {JSONParser} from '@oresoftware/json-stream-parser';
Right now, the library assumes each separate chunk of json is separated by newline characters.
In the future, we could attempt to use a different delimiting character, as a user-provided input variable.
Recommendations welcome.
process.stdin.resume().pipe(new JSONParser()).on('data', d => {
// now we got some POJSOs!
});
import * as net from 'net';
const [port,host] = [6970,'localhost'];
const ws = net.createConnection(port, host);
ws.setEncoding('utf8')
.pipe(new JSONParser()) // tcp connection is bidirection/full-duplex .. we send JSON strings each way
.on('data', onData); // we receive data coming from the tcp server here
// and we send data like this:
ws.write(JSON.stringify({'some':'data'}) + '\n', 'utf8', cb); // make sure to include the newline char when you write
const k = cp.spawn('bash');
k.stdin.end(`echo '{"foo":"bar"}\n'`); // make sure to include the newline char when you write
k.stdout.pipe(new JSONParser())
7890
.on('data', d => {
// => {foo:'bar'}
});
const k = cp.spawn('bash');
k.stdin.end(`
foo="medicine"
cat <<EOF\n{"foo":"$foo"}\nEOF # make sure to include the newline char when you write
`);
k.stdout.pipe(new JSONParser()).on('data', d => {
assert.deepStrictEqual(d, {foo: 'medicine'});
});
If you JSON has unescaped newlines, then use the delimiter option.
new JSONParser({delimiter: '∆∆∆'}); // use 3 alt-j's to separate json chunks, since newlines won't work