javascript - 如何使用 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.json
而const data
不会遇到ERR_STRING_TOO_LONG
/Cannot create a string longer than 0x1fffffe8 characters
错误。
我已经在 StackOverflow 等上看到了有关如何像这样流式传输巨大的 Json 文件并将其分解为更小的对象来单独处理它们的示例,但这不是我想要的,我需要它在一个data
对象中以便整个部分期望单个data
对象的系统不必重构来处理流。
注意:Json 文件中的顶级对象不是数组。
解决方案
使用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);
推荐阅读
- laravel - 在 Lumen 包中使用用户模型
- android-studio - 如何反转 Gridview 布局以确保最新帖子位于顶部?
- linux - 使用 python 脚本运行 linux 命令
- git - Bitbucket 服务器:推送修改特定文件夹内文件的提交时发送电子邮件
- php - 在 PHP (Apache) 中记录 GET 请求和查询字符串
- wso2 - 在 WSO2 APIM 中启用电子邮件用户名时,WSO2 分析中断
- android - 如何使用 Uri 对象打开现有的 SQLite 数据库?
- bash - `if [[ .. ]] 和有什么区别?然后 ...` 和 `[[ .. ]] && ...`?
- android - 在 Android 的 3d 模型中的特定 X、Y、Z 位置显示文本
- python - 是否可以使用 curl 库从 python 代码带宽中获取?