如何通过node.js中的JSONStream模块解析一个大的,以换行符分隔的JSON文件?

use*_*624 20 json node.js jsonlines

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

{'name':'1','age':5}
{'name':'2','age':3}
{'name':'3','age':6}
Run Code Online (Sandbox Code Playgroud)

我现在在node.js中使用JSONStream来解析一个大的json文件,我使用JSONStream的原因是因为它基于流.

但是,示例中的两个解析语法都无法帮助我在每行中使用分隔的JSON解析此json文件

var parser = JSONStream.parse(**['rows', true]**);
var parser = JSONStream.parse([**/./**]);
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我

fra*_*gio 17

警告:由于编写了这个答案,JSONStream库的作者删除了emit root事件功能,显然是为了修复内存泄漏.如果您需要emit根功能,可以使用0.xx版本.

以下是未经修改的原始答案:

自述文件:

JSONStream.parse(路径)

path应该是属性名称,RegExps,布尔值和/或函数的数组.匹配路径的任何对象都将作为'data'.

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

在您的情况下,由于您希望返回JSON对象而不是特定属性,因此您将使用该'root'事件,而无需指定路径.

您的代码可能如下所示:

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
});
Run Code Online (Sandbox Code Playgroud)

  • 注意var行末尾的拼写错误 - ';' 应该是','. (2认同)