首页 > 解决方案 > 如何使用 NodeJS 将巨大的 Json 文件读入单个对象?

问题描述

我正在升级一个后端系统,该系统用于require('./file.json')将 1GB Json 文件读入一个对象,然后将该对象传递给系统的其他部分以供使用。

我知道将 json 文件读入对象的两种方法

const fs = require('fs');
const rawdata = fs.readFileSync('file.json');
const data = JSON.parse(rawdata);

const data = require('./file.json');

这在旧版本的 node(12) 中工作正常,但在新版本(14 或 16)中不起作用

所以我需要找到另一种方法来让这个 1GB 变大file.jsonconst data不会遇到ERR_STRING_TOO_LONG/Cannot create a string longer than 0x1fffffe8 characters错误。

我已经在 StackOverflow 等上看到了有关如何像这样流式传输巨大的 Json 文件并将其分解为更小的对象来单独处理它们的示例,但这不是我想要的,我需要它在一个data对象中以便整个部分期望单个data对象的系统不必重构来处理流。

注意:Json 文件中的顶级对象不是数组。

标签: javascriptnode.jsjson

解决方案


使用big-json解决了这个问题。

npm install big-json
const fs = require('fs');
const path = require('path');
const json = require('big-json');
 
const readStream = fs.createReadStream('file.json');
const parseStream = json.createParseStream();
 
parseStream.on('data', function(pojo) {
    // => receive reconstructed POJO
});
 
readStream.pipe(parseStream);

推荐阅读