Tag: jsonstream

JSONStream的基本testing不起作用

我正在查看node.js中的JSONStream,并且正在尝试使用下面的小应用来处理它: var JSONStream = require('JSONStream'); var Stream = require('stream'); var s = new Stream(); s.pipe = function(dest) { dest.write('{"foo":1}'); return dest; }; var parser = JSONStream.parse(/foo/); s.pipe(parser).pipe(process.stdout); 不幸的是,当在命令行上运行时,这不会向控制台写入任何内容。 我究竟做错了什么?

如何读取每个对象的JSON对象stream

我有一个二进制应用程序,它会生成一个连续的json对象stream(不是一个json对象数组)。 Json对象有时可以跨越多行(仍然是一个有效的json对象,但是被美化了)。 我可以连接到这个stream,并阅读它没有像这样的问题: var child = require('child_process').spawn('binary', ['arg','arg']); child.stdout.on('data', data => { console.log(data); }); stream是缓冲区,并随时发送数据事件,所以我玩readline模块,以parsing缓冲区成行,它的工作原理(我能够JSON.parse()线)的JSON对象不跨在多个线路上。 最佳的解决scheme是听取返回单个JSON对象的事件,如: child.on('json', object => { }); 我注意到stream节点文档中的objectMode选项,但是我得到一个缓冲区格式的stream,所以我相信我无法使用它。 在pixl-json-stream,json-stream看看npm,但是在我的意见中没有一个符合目的。 有单簧pipe对象stream,但是需要根据事件从头开始构buildjson对象。 我没有控制JSON对象stream,大部分时间一个对象在一行上,但是10-20%的时间json对象在多行(\ n作为EOL)没有对象之间的分隔符。 每个新的对象总是从新的一行开始。 样品stream: { "a": "a", "b":"b" } { "a": "x", "b": "y", "c": "z" } { "a": "a", "b":"b" } 必须有一个解决scheme,我只是错过了一些明显的东西。 宁愿find适当的模块,然后用正则expression式parsing器来处理这种情况。

当通过es.map()和JSONStream.stringify()将JSONStream.parsed()数据pipe道传输到文件stream时节点堆耗尽

我试图通过JSONStream.parse()将inputstream(通过巨大的GeoJSON文件创build)分stream成对象,然后通过event-stream.map()来允许我转换对象,然后通过JSONStream .stringify()创build一个string,最后写入一个可写的输出stream。 随着进程的运行,我可以看到节点的内存占用不断增长,直到最终耗尽堆。 以下是重现问题的最简单的脚本(test.js): const fs = require("fs") const es = require("event-stream") const js = require("JSONStream") out = fs.createWriteStream("/dev/null") process.stdin .pipe(js.parse("features.*")) .pipe(es.map( function(data, cb) { cb(null, data); return; } )) .pipe(js.stringify("{\n\"type\": \"FeatureCollection\", \"features\": [\n\t", ",\n\t", "\n]\n}")) .pipe(out) 一个小小的bash脚本(barf.sh)将无尽的JSONstream传递给节点的process.stdin,这将导致节点的堆逐渐增长: #!/bin/bash echo '{"type":"FeatureCollection","features":[' while : do echo '{"type":"Feature","properties":{"name":"A Street"}, "geometry":{"type":"LineString"} },' done 通过这样运行它: barf.sh | node test.js […]

使用JSONPath和JSONStreamparsingjsonstream

我有这样的数据stream: {"foo": 1} {"bar": 2} 注意:这些地图之间没有逗号。 我想在node.js中读取这个stream,以便我可以捕获这两个映射,如上所示。 我一直在试图用JSONStream来做到这一点,JSONStream很好地识别stream中的离散JSON实体,但有些变化的数据。 所以我运行的代码是: var jsonStream = require('JSONStream'); var es = require('event-stream'); var parser = jsonStream.parse('$*'); process.stdin.pipe(parser) .pipe(es.mapSync(function (data) { console.log(data); })); 而这个输出: { value: 1, key: 'foo' } { value: 2, key: 'bar' } 我希望它输出不变的JSON映射: {"foo": 1} {"bar": 2} 任何人都知道我可以用JSONStream或其他东西来实现这一点吗?

使用Oboe.js,MongoDB和Express.js进行JSONstream式传输

我正在用Oboe.js,MongoDB和Express.js通过HTTP实验JSONstream。 重点是在MongoDB (Node.js的mongodb本地驱动器)中执行查询,将它(一个JavaScript数组)传递给Express.js并使用Oboe.js在浏览器中parsing它。 在MongoDB查询服务器端和客户端的JSONparsing中,我做的基准testing比较了streaming和blocking 。 这是两个基准的源代码。 第first number是1000 queries 10 million documents collection中100 items (分页)的1000 queries的毫秒second number ,括号之间的second number表示MongoDB结果数组中第一个项目之前的毫秒数parsing。 stream媒体基准服务器端: // Oboe.js – 20238 (16.887) // Native – 16703 (16.69) collection .find() .skip(+req.query.offset) .limit(+req.query.limit) .stream() .pipe(JSONStream.stringify()) .pipe(res); 阻塞基准服务器端: // Oboe.js – 17418 (14.267) // Native – 13706 (13.698) collection .find() .skip(+req.query.offset) .limit(+req.query.limit) .toArray(function (e, docs) […]

node.js – JSONStream期间的无限循环

我有一个在生产中冻结的node.js服务器,它似乎是由JSONStream内部的无限循环引起的。 以下是从冻结服务器的核心转储中捕获的​​堆栈跟踪: 1: toString [buffer.js:~392] (this=0x1e28fb6d25c9 <a Buffer>#1#,encoding=0x266ee104121 <undefined>,start=0x266ee104121 <undefined>,end=0x266ee104121 <undefined>) 2: arguments adaptor frame: 0->3 3: write [/home/deploy/node_modules/JSONStream/node_modules/jsonparse/jsonparse.js:136] (this=0x32cc8dd5a999 <a Parser>#2#,buffer=0x32cc8dd5aa49 <a Buffer>#3#) 4: /* anonymous */ [/home/deploy/node_modules/JSONStream/index.js:~17] (this=0x32cc8dd5ab11 <a Stream>#4#,chunk=0x32cc8dd5aa49 <a Buffer>#3#) 5: write [/home/deploy/node_modules/JSONStream/node_modules/through/index.js:~24] (this=0x32cc8dd5ab11 <a Stream>#4#,data=0x32cc8dd5aa49 <a Buffer>#3#) 6: write [_stream_readable.js:~582] (this=0x266ee106c91 <JS Global Object>#5#,dest=0x32cc8dd5ab11 <a Stream>#4#,i=0,list=0x266ee104101 <null>) 7: flow [_stream_readable.js:592] […]

如何使用stream到JSONstring在Node.js中的大型嵌套对象?

我有一个大的JavaScript对象,我想转换为JSON并写入一个文件。 我以为我可以用像这样的stream来做到这一点 var fs = require('fs'); var JSONStream = require('JSONStream'); var st = JSONStream.stringifyObject() .pipe(fs.createWriteStream('./output_file.js')) st.write(large_object); 当我尝试这个时,我得到一个错误: stream.js:94 throw er; // Unhandled stream error in pipe. ^ TypeError: Invalid non-string/buffer chunk at validChunk (_stream_writable.js:153:14) at WriteStream.Writable.write (_stream_writable.js:182:12) 所以显然我不能只写一个对象到这个stringifyObject 。 我不确定下一步是什么。 我需要将对象转换为缓冲区? 通过一些转换stream来运行对象,并将其传递给strinigfyObject