As an open-source project, dominictarr/JSONStream has picked up 1.9k stars on GitHub (JavaScript). rawStream.pipe(JSONStream.parse()).pipe(streamOfObjects)
Snapshot summary built from the project's own GitHub metadata — there's no written TopGit review yet. The page will update automatically when a full review is published.
WHY NO REVIEW YET
TopGit writes full reviews for the most-starred, most-requested repositories. This page is a snapshot until then — see the READ ME tab for the original README in full.
var request = require('request')
, JSONStream = require('JSONStream')
, es = require('event-stream')
request({url: 'http://isaacs.couchone.com/registry/_all_docs'})
.pipe(JSONStream.parse('rows.*'))
.pipe(es.mapSync(function (data) {
console.error(data)
return data
}))
JSONStream.parse(path)
parse stream of values that match a path
JSONStream.parse('rows.*.doc')
The .. operator is the recursive descent operator from JSONPath, which will match a child at any depth (see examples below).
If your keys have keys that include . or * etc, use an array instead.
['row', true, /^doc/].
If you use an array, RegExps, booleans, and/or functions. The .. operator is also available in array representation, using {recurse: true}.
any object that matches the path will be emitted as 'data' (and piped down stream)
If path is empty or null, no 'data' events are emitted.
If you want to have keys emitted, you can prefix your * operator with $: obj.$* - in this case the data passed to the stream is an object with a key holding the key and a value property holding the data.
create a Stream that parses the documents from the feed like this:
var stream = JSONStream.parse(['rows', true, 'doc']) //rows, ANYTHING, doc
stream.on('data', function(data) {
console.log('received:', data);
});
//emits anything from _before_ the first match
stream.on('header', function (data) {
console.log('header:', data) // => {"total_rows":129,"offset":0}
})
awesome!
In case you wanted the contents the doc emitted:
var stream = JSONStream.parse(['rows', true, 'doc', {emitKey: true}]) //rows, ANYTHING, doc, items in docs with keys
stream.on('data', function(data) {
console.log('key:', data.key);
console.log('value:', data.value);
});
You can also emit the path:
var stream = JSONStream.parse(['rows', true, 'doc', {emitPath: true}]) //rows, ANYTHING, doc, items in docs with keys
stream.on('data', function(data) {
console.log('path:', data.path);
console.log('value:', data.value);
});
recursive patterns (..)
JSONStream.parse('docs..value')
(or JSONStream.parse(['docs', {recurse: true}, 'value']) using an array)
will emit every value object that is a child, grand-child, etc. of the
docs object. In this example, it will match exactly 5 times at various depth
levels, emitting 0, 1, 2, 3 and 4 as results.
provide a function that can be used to map or filter
the json output. map is passed the value at that node of the pattern,
if map return non-nullish (anything but null or undefined)
that value will be emitted in the stream. If it returns a nullish value,
nothing will be emitted.
JSONStream also emits 'header' and 'footer' events,
the 'header' event contains anything in the output that was before
the first match, and the 'footer', is anything after the last match.
JSONStream.stringify(open, sep, close)
Create a writable stream.
you may pass in custom open, close, and seperator strings.
But, by default, JSONStream.stringify() will create an array,
(with default options open='[\n', sep='\n,\n', close='\n]\n')
If you call JSONStream.stringify(false)
the elements will only be seperated by a newline.
If you only write one item this will be valid JSON.
If you write many items,
you can use a RegExp to split it into valid chunks.
JSONStream.stringifyObject(open, sep, close)
Very much like JSONStream.stringify,
but creates a writable stream for objects instead of arrays.
numbers will be emitted as numbers.
huge numbers that cannot be represented in memory as javascript numbers will be emitted as strings.
cf https://github.com/creationix/jsonparse/commit/044b268f01c4b8f97fb936fc85d3bcfba179e5bb for details.
Acknowlegements
this module depends on https://github.com/creationix/jsonparse
by Tim Caswell
and also thanks to Florent Jaby for teaching me about parsing with:
https://github.com/Floby/node-json-streams
license
Dual-licensed under the MIT License or the Apache License, version 2.0
TopGit's last sync did not record any GitHub topics for dominictarr/JSONStream. GitHub topics appear in the right sidebar of a repository page; that's the authoritative place to check.
How active is development on dominictarr/JSONStream?
The most recent commit recorded on dominictarr/JSONStream was 7.9 years ago, based on the GitHub push timestamp. The repository has 162 forks — one of the better signals of community interest.
How many stars does dominictarr/JSONStream have?
dominictarr/JSONStream has 1.9k GitHub stars — refresh the page for the live number, or check github.com/dominictarr/JSONStream. TopGit mirrors GitHub's count but does not claim minute-by-minute accuracy.
What language is dominictarr/JSONStream written in?
dominictarr/JSONStream is written primarily in JavaScript. GitHub's language field is based on the largest share of bytes in the default branch.
Where do I read more about dominictarr/JSONStream?
This TopGit page is a snapshot — the READ ME tab shows the project's own README content (links stripped, images preserved). The GitHub repository at github.com/dominictarr/JSONStream is the definitive source.
Read full README in the tab above.
Still deciding about JSONStream?
One click hands the question to an AI along with this page — see what it says about JSONStream.