-
-
Notifications
You must be signed in to change notification settings - Fork 53
StreamObject
StreamObject assumes that a token stream represents an object and streams out its top-level properties as assembled JavaScript objects.
{"a": 1, "b": "a", "c": [], "d": {}, "e": true}
// StreamObject will produce an object stream:
{key: 'a', value: 1}
{key: 'b', value: 'a'}
{key: 'c', value: []}
{key: 'd', value: {}}
{key: 'e', value: true}As every streamer, it assumes that individual objects can fit in memory, but the whole file, or any other source, should be streamed.
Warning: it cannot be used with a stream of objects produced by a JSON Streaming source, or Pick if it picks more than one object.
const {streamObject} = require('stream-json/streamers/stream-object.js');
const fs = require('fs');
const pipeline = fs.createReadStream('sample.json').pipe(streamObject.withParserAsStream());
pipeline.on('data', data => console.log(data));Being based on StreamBase, StreamObject has no special API.
streamObject() is the factory function. It takes options described above and returns a function for use in chain():
const {chain} = require('stream-chain');
const {parser} = require('stream-json');
const {streamObject} = require('stream-json/streamers/stream-object.js');
const fs = require('fs');
const pipeline = chain([fs.createReadStream('sample.json'), parser(), streamObject()]);
let objectCounter = 0;
pipeline.on('data', () => ++objectCounter);
pipeline.on('end', () => console.log(`Found ${objectCounter} objects.`));Returns a Duplex stream (object-mode both sides) wrapping streamObject() for .pipe() usage.
withParser() takes one argument:
-
options— combined Parser and streamer options. Passed to both the parser andstreamObject().
Returns a Duplex stream (text-mode writable, object-mode readable) wrapping a parser() + streamObject() pipeline via stream-chain.
Built with the withParser() utility.
const {streamObject} = require('stream-json/streamers/stream-object.js');
const fs = require('fs');
const pipeline = fs.createReadStream('sample.json').pipe(streamObject.withParserAsStream());
let objectCounter = 0;
pipeline.on('data', () => ++objectCounter);
pipeline.on('end', () => console.log(`Found ${objectCounter} objects.`));streamObject ships in two substrate-specific entries with the same factory shape:
-
Node —
stream-json/streamers/stream-object.js. HasasStream,asWebStream,withParser,withParserAsStream,withParserAsWebStream. -
Web —
stream-json/web/streamers/stream-object.js. HasasWebStream,withParser,withParserAsWebStream. Pulls in no Node-stream imports.
Both factories return the same flushable, so chain on either substrate auto-wraps it. Use chain from stream-chain on Node and from stream-chain/web on Web.
// Web
import {chain} from 'stream-chain/web';
import {parser} from 'stream-json/web/parser.js';
import {streamObject} from 'stream-json/web/streamers/stream-object.js';
const pipeline = chain([source, parser(), streamObject()]);
for await (const {key, value} of pipeline.readable) console.log(key, value);Or the parser-included shortcut:
const {readable, writable} = streamObject.withParserAsWebStream();
sourceReadable.pipeTo(writable);
for await (const item of readable) console.log(item);Start here
Core
Filters
Streamers
Essentials
Utilities
File I/O (Node-only)
JSONC
JSONL (use stream-chain)
Reference
Built on stream-chain