Javascript 在Nodejs中解析大型JSON文件,并独立处理每个对象
我需要在Nodejs中读取一个大JSON文件(大约630MB),然后将每个对象插入MongoDB 我在这里读到了答案: 但是,答案是逐行处理JSON文件,而不是逐个对象处理它。因此,我仍然不知道如何从这个文件中获取对象并对其进行操作 我的JSON文件中有大约100000个此类对象 数据格式:Javascript 在Nodejs中解析大型JSON文件,并独立处理每个对象,javascript,json,node.js,parsing,Javascript,Json,Node.js,Parsing,我需要在Nodejs中读取一个大JSON文件(大约630MB),然后将每个对象插入MongoDB 我在这里读到了答案: 但是,答案是逐行处理JSON文件,而不是逐个对象处理它。因此,我仍然不知道如何从这个文件中获取对象并对其进行操作 我的JSON文件中有大约100000个此类对象 数据格式: [ { "id": "0000000", "name": "Donna Blak", "livingSuburb": "Tingalpa", "age": 53,
[
{
"id": "0000000",
"name": "Donna Blak",
"livingSuburb": "Tingalpa",
"age": 53,
"nearestHospital": "Royal Children's Hospital",
"treatments": {
"19890803": {
"medicine": "Stomach flu B",
"disease": "Stomach flu"
},
"19740112": {
"medicine": "Progeria C",
"disease": "Progeria"
},
"19830206": {
"medicine": "Poliomyelitis B",
"disease": "Poliomyelitis"
}
},
"class": "patient"
},
...
]
干杯
Alex有一个很好的模块,名为,它完全满足您的需求 它可以解析远远超过可用内存的JSON文件 及 StreamArray处理一个常见的用例:一个由相对较小的对象组成的庞大数组,类似于Django生成的数据库转储。它对阵列组件进行单独的流式处理,负责自动组装它们 下面是一个非常基本的例子:
const StreamArray=require('stream-json/streamers/StreamArray');
const path=require('path');
常数fs=要求('fs');
const jsonStream=StreamArray.withParser();
//您将在这里获得json对象
//键是这里的数组索引
jsonStream.on('data',({key,value})=>{
console.log(键、值);
});
jsonStream.on('end',()=>{
console.log(“全部完成”);
});
const filename=path.join(_dirname,'sample.json');
createReadStream(文件名).pipe(jsonStream.input)代码>我为此制作了一个软件包,如果您熟悉rxjs,您会感到宾至如归:
Stream json必须是目前为止最好的json流读取器。它使我免于创建自己的流和挑选每个对象。谢谢你的回答。我也遇到过同样的问题,内存不足,唯一的解决办法是一次流式处理每个对象。@LixingLiang将单个文件拆分为多个文件并并行处理,这将提高效率。瓶颈可能是读取文件时的IO操作。这些示例似乎过时了。我在require和改为const StreamArray=require('stream-json/streamers/StreamArray')时遇到了错误,但随后我得到了错误类型error:Cannot read property'on'of undefined.@PrestonDocks该包在2018年更新时出现了一个主要版本跳转(性能更好,更实用)。要么使用以前的主要版本,要么阅读新文档并相应地更新代码。@Prestontocks,更新了答案,您介意看一下吗。