如何通过node.js中的JSONStream模块parsing一个大的Newline分隔的JSON文件?

我有一个大的json文件,它是新行分隔的JSON,其中多个标准的JSON对象由额外的换行符分隔,例如

{'name':'1','age':5} {'name':'2','age':3} {'name':'3','age':6} 

我现在在node.js中使用JSONStream来parsing一个大的JSON文件,我使用JSONStream的原因是因为它是基于stream。

但是,在这个例子中,这两个parsing语法都无法帮助我在每一行中parsing这个带有分隔JSON的json文件

 var parser = JSONStream.parse(**['rows', true]**); var parser = JSONStream.parse([**/./**]); 

有人可以帮助我

       

网上收集的解决方案 "如何通过node.js中的JSONStream模块parsing一个大的Newline分隔的JSON文件?"

警告 :由于写了这个答案,JSONStream库的作者删除了发出的根事件function ,显然是为了修复内存泄漏。 未来这个库的用户,如果你需要发射根function,你可以使用0.xx版本。

下面是未经修改的原始答案

自述文件 :

JSONStream.parse(path)

path应该是属性名称,RegExps,布尔值和/或函数的数组。 与path相匹配的任何对象将作为'data'发射。

收到所有数据后,会发出'root'事件。 'root'事件传递根对象和匹配对象的计数。

在你的情况下,因为你想取回JSON对象,而不是特定的属性,你将使用'root'事件,你不需要指定一个path。

你的代码可能看起来像这样:

 var fs = require('fs'), JSONStream = require('JSONStream'); var stream = fs.createReadStream('data.json', {encoding: 'utf8'}), parser = JSONStream.parse(); stream.pipe(parser); parser.on('root', function (obj) { console.log(obj); // whatever you will do with each JSON object }); 

JSONstream旨在parsing单个巨大的JSON对象,而不是许多JSON对象。 你想在新行分割stream,然后parsing它们为JSON。

NPM包拆分声称做这个分裂,甚至有一个function来parsing你的JSON行 。