Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Nodejs中解析大型JSON文件,并独立处理每个对象_Javascript_Json_Node.js_Parsing - Fatal编程技术网

Javascript 在Nodejs中解析大型JSON文件,并独立处理每个对象

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,

我需要在Nodejs中读取一个大JSON文件(大约630MB),然后将每个对象插入MongoDB

我在这里读到了答案:

但是,答案是逐行处理JSON文件,而不是逐个对象处理它。因此,我仍然不知道如何从这个文件中获取对象并对其进行操作

我的JSON文件中有大约100000个此类对象

数据格式:

[
  {
    "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,更新了答案,您介意看一下吗。