当前位置: 首页 > 知识库问答 >
问题:

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

亢正德
2023-03-14

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

我在这里看到了答案:在Nodejs中解析大型JSON文件。

然而,答案是逐行处理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"
  },
 ...
]

干杯

亚历克斯

共有1个答案

谢铭
2023-03-14

有一个很好的名为“stream-json”的模块,它完全符合您的要求。

它可以解析远远超过可用内存的JSON文件。

StreamArray处理一个常见的用例:一个巨大的相对较小的对象数组,类似于Django生成的数据库转储。它单独流式传输数组组件,负责自动组装它们。

这是一个非常基本的例子:

const StreamArray = require('stream-json/streamers/StreamArray');
const path = require('path');
const fs = require('fs');

const jsonStream = StreamArray.withParser();

//You'll get json objects here
//Key is an array-index here
jsonStream.on('data', ({key, value}) => {
    console.log(key, value);
});

jsonStream.on('end', () => {
    console.log('All done');
});

const filename = path.join(__dirname, 'sample.json');
fs.createReadStream(filename).pipe(jsonStream.input);
 类似资料:
  • 问题内容: 我需要在Nodejs中读取一个大的JSON文件(大约630MB),并将每个对象插入MongoDB。 但是,答案是逐行处理JSON文件,而不是逐对象处理。因此,我仍然不知道如何从该文件中获取对象并对其进行操作。 我的JSON文件中大约有100,000种此类对象。 资料格式: 干杯, 问题答案: 有一个名为“ stream-json”的不错的模块,它可以完全满足您的需求。 它可以解析远远超

  • 我有一个文件,它以JSON形式存储了许多JavaScript对象,我需要读取该文件,创建每个对象,并对它们做一些事情(在我的例子中,将它们插入数据库)。JavaScript对象可以用一种格式表示: 格式A: 或格式B: 请注意,

  • 问题内容: 我正在研究可访问API的cron脚本,可接收JSON文件(大量对象)并将其存储在本地。完成后,另一个脚本需要解析下载的JSON文件,并将每个对象插入MySQL数据库。 我目前正在使用和。这将尝试在尝试处理之前将整个文件读入内存。除了我的JSON文件通常在250MB-1GB +之间的事实之外,这将很好。我知道我可以增加我的PHP内存限制,但这在我看来似乎并不是最大的答案。我知道我可以运行

  • 问题内容: 我正在创建一个Android应用程序,该应用程序应将Json从文件或URL解析为jsonarray和jsonobjects。问题是我的json是3.3 mb,当我使用一个简单的代码时,是这样的:(现在无法访问我的真实代码,因为我正在工作,从教程中复制了一些代码;因此其中可能有一些错误) (假设我已经有我的输入流内容) 当我在Android设备上运行此代码时,将字符串解析为jsonArr

  • 我正在创建一个android应用程序,它应该解析一个Json从一个文件或url到一个json数组和json对象。问题是我的json是3.3mb,当我使用一个简单的代码时,就像这样:(不能访问我的真实代码,因为我在工作,从教程中复制了一些代码;所以可能会有一些错误) (假设我已经有了inputstream内容) 当我在android设备上运行这段代码时,在将字符串解析为jsonArray时,会出现O

  • 问题内容: 我需要构建一个函数来处理大型CSV文件,以便在bluebird.map()调用中使用。考虑到文件的潜在大小,我想使用流媒体。 此函数应接受一个流(一个CSV文件)和一个函数(处理该流中的块),并在读取文件到末尾(已解决)或错误(已拒绝)时返回promise。 所以,我开始: 现在,我有两个相互关联的问题: 我需要限制正在处理的实际数据量,以免造成内存压力。 作为参数传递的函数通常将是异

  • 问题内容: 我有一个文件,该文件以JSON形式存储许多JavaScript对象,我需要读取该文件,创建每个对象并对其进行处理(以我为例将其插入到db中)。JavaScript对象可以表示为以下格式: 格式A: 或 格式B: 请注意,表示很多JSON对象。我知道我可以将整个文件读入内存,然后像这样使用: 但是,该文件可能确实很大,我更喜欢使用流来完成此操作。我在流中看到的问题是,文件内容随时可能被分

  • 问题内容: 我正在尝试处理较大的(可能多达200M)JSON文件。文件的结构基本上是对象数组。 因此,遵循以下原则: 每个对象都具有任意属性,不必与数组中的其他对象共享它们(例如,具有相同的属性)。 我想对数组中的每个对象进行处理,并且由于文件可能很大,因此无法将整个文件内容都包含在内存中,无法解码JSON并遍历PHP数组。 因此,理想情况下,我想读取文件,为每个对象获取足够的信息并进行处理。如果