我有一个很大的json文件,它是换行符分隔的JSON,其中多个标准JSON对象用额外的换行符分隔,例如
{'name':'1','age':5}
{'name':'2','age':3}
{'name':'3','age':6}
我现在使用node.js中的JSONStream来解析一个大的json文件,我使用JSONStream的原因是因为它是基于流的。
但是,示例中的两种解析语法都不能帮助我解析每行都有分隔的json的JSON文件
var parser = JSONStream.parse(**['rows', true]**);
var parser = JSONStream.parse([**/./**]);
有人能帮我一下吗?
发布于 2017-12-11 18:36:07
JSONstream旨在解析单个巨大的JSON对象,而不是许多JSON对象。您希望在换行处拆分流,然后将它们解析为JSON。
NPM包split声称可以进行这种拆分,甚至还为您提供了一个feature to parse the JSON lines。
发布于 2020-05-04 16:40:11
如果您的文件不够大,这里是一个简单但性能不佳的解决方案:
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}]`);
发布于 2020-08-16 02:45:34
我创建了一个包@jsonlines/core
,它将jsonline解析为对象流。
您可以尝试以下代码:
npm install @jsonlines/core
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
或其他方式来使用它。
https://stackoverflow.com/questions/15121584
复制相似问题