Cannot create a string longer than 0x1fffffe8 characters in JSON.parse?

Tec*_*ain 4 javascript json node.js npm

I have JSON file which has json data of size 914MB. I loading the file with fs-extra and parsing it. But when i parse it get error as

cannot create a string longer than 0x1fffffe8 characters

Below is code

        const fs = require('fs-extra');
        const rawdata = fs.readFileSync('src/raw.json');
        const data = JSON.parse(rawdata);
Run Code Online (Sandbox Code Playgroud)

I am running the project with npm and to run i have below command in package.json.

"scripts": {
   
    "start:dev": "cross-env NODE_OPTIONS='--max-old-space-size=4096' ts-node -r tsconfig-paths/register ./src --env=development",
  
  }
Run Code Online (Sandbox Code Playgroud)

vas*_*vas 7

0x1fffffe8 正好是 512MB。

许多评论者是正确的:您遇到了系统限制。我同意@Pointy 的观点,它很可能是 Node 字符串长度限制。fs-extra与极限无关

在任何情况下,您都必须分块处理该 JSON。

几乎可以肯定,您的海量 JSON 数据是根级别的数组。因此,如果您使用流/SAX 解析器,您可以单独或批量处理该根数组中的每个元素,以任何有意义的方式处理。

?? 你不想要一个只支持JSON Streaming 协议的流解析器,因为该协议是为在一个流中连接的多个 JSON 对象的流而设计的。但据我所知,你有一个庞大的整体 JSON 对象,很可能是我上面提到的根数组。

您有许多解析器选项。为了帮助您入门,以下是 NPM 上使用率最高的那些:

如果性能至关重要

如果您知道源 JSON 的格式非常规则,例如根数组中的每条记录都是 N 行长,那么最有效的方法可能是通过缓冲读取器读取原始行,抓取每 N 行(针对开头进行调整)顶部根数组的行),以及JSON.parse单独的(删除分隔根数组条目的逗号之后。只是一个原始想法。我从来没有做过!

  • 尝试过“大多数”吗?此答案中链接的“stream-json”适用于巨大的 JSON 文件。 (4认同)