首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用node.js中的JSONStream模块解析以换行符分隔的大型JSON文件?

如何使用node.js中的JSONStream模块解析以换行符分隔的大型JSON文件?
EN

Stack Overflow用户
提问于 2013-02-28 04:19:34
回答 4查看 19.9K关注 0票数 26

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

代码语言:javascript
复制
{'name':'1','age':5}
{'name':'2','age':3}
{'name':'3','age':6}

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

但是,示例中的两种解析语法都不能帮助我解析每行都有分隔的json的JSON文件

代码语言:javascript
复制
var parser = JSONStream.parse(**['rows', true]**);
var parser = JSONStream.parse([**/./**]);

有人能帮我一下吗?

EN

回答 4

Stack Overflow用户

发布于 2017-12-11 18:36:07

JSONstream旨在解析单个巨大的JSON对象,而不是许多JSON对象。您希望在换行处拆分流,然后将它们解析为JSON。

NPM包split声称可以进行这种拆分,甚至还为您提供了一个feature to parse the JSON lines

票数 4
EN

Stack Overflow用户

发布于 2020-05-04 16:40:11

如果您的文件不够大,这里是一个简单但性能不佳的解决方案:

代码语言:javascript
复制
const fs = require('fs');

let rawdata = fs.readFileSync('fileName.json');

let convertedData = String(rawdata)
    .replace(/\n/gi, ',')
    .slice(0, -1);

let JsonData= JSON.parse(`[${convertedData}]`); 
票数 1
EN

Stack Overflow用户

发布于 2020-08-16 02:45:34

我创建了一个包@jsonlines/core,它将jsonline解析为对象流。

您可以尝试以下代码:

代码语言:javascript
复制
npm install @jsonlines/core
代码语言:javascript
复制
const fs = require("fs");
const { parse } = require("@jsonlines/core");

// create a duplex stream which parse input as lines of json
const parseStream = parse();

// read from the file and pipe into the parseStream
fs.createReadStream(yourLargeJsonLinesFilePath).pipe(parseStream);

// consume the parsed objects by listening to data event
parseStream.on("data", (value) => {
  console.log(value);
});

请注意,parseStream是标准节点双工流。因此,您也可以使用for await ... of或其他方式来使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15121584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档