使用 JSONStream 读取大型 JSON 文件
Posted
技术标签:
【中文标题】使用 JSONStream 读取大型 JSON 文件【英文标题】:Using JSONStream to read large JSON files 【发布时间】:2018-08-23 15:13:01 【问题描述】:我一直在尝试使用 JSONStream 读取文件,但我在这方面没有太多经验,而且很难找到有关它的信息(教程、文档)。
我在这里的某个地方找到了这段代码:
var fs = require('fs'),
JSONStream = require('JSONStream');
var stream = fs.createReadStream('tst.json', encoding: 'utf8'),
parser = JSONStream.parse();
stream.pipe(parser);
console.log(parser);
parser.on('root', function (obj)
console.log(obj); // whatever you will do with each JSON object
);
我试图将它与这样的 json 测试文件一起使用:
"colors": [
"color": "black",
"category": "hue",
"type": "primary",
"code":
"rgba": [255, 255, 255, 1],
"hex": "#000"
,
"color": "white",
"category": "value",
"code":
"rgba": [0, 0, 0, 1],
"hex": "#FFF"
,
"color": "red",
"category": "hue",
"type": "primary",
"code":
"rgba": [255, 0, 0, 1],
"hex": "#FF0"
,
"color": "blue",
"category": "hue",
"type": "primary",
"code":
"rgba": [0, 0, 255, 1],
"hex": "#00F"
,
"color": "yellow",
"category": "hue",
"type": "primary",
"code":
"rgba": [255, 255, 0, 1],
"hex": "#FF0"
,
"color": "green",
"category": "hue",
"type": "secondary",
"code":
"rgba": [0, 255, 0, 1],
"hex": "#0F0"
]
我认为它会返回所有对象,但什么也没发生,它甚至没有进入“parser.on('root', function (obj)”。 我能做些什么来完成这项工作?
【问题讨论】:
【参考方案1】:root
事件已从 JSONStream
中删除。请改用data
事件。 https://github.com/dominictarr/JSONStream/commit/97d973ac59d0e58748cec98ea87aae36e057d368
还应将 JSON 路径指定为 JSONStream.parse()
的参数。对于您的 JSON,它可能是 JSONStream.parse('colors.*')
所以把所有东西放在一起,应该是
var fs = require('fs'),
JSONStream = require('JSONStream');
var stream = fs.createReadStream('tst.json', encoding: 'utf8'),
parser = JSONStream.parse('colors.*');
stream.pipe(parser);
parser.on('data', function (obj)
console.log(obj); // whatever you will do with each JSON object
);
【讨论】:
好的,谢谢!我仍然有一个问题,它适用于我拥有的小 json 文件,但如果我使用大文件,则没有任何反应。它在命令行上没有显示任何错误并且它完成了运行,但没有显示任何内容。 JSON 文件的估计大小是多少?知道文件有多大可以帮助我测试它。 文件大小为1GB :/以上是关于使用 JSONStream 读取大型 JSON 文件的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Node.js 中使用流对大型嵌套对象进行 JSON 字符串化?
@aws-sdk/lib-storage 使用 JSONStream.stringify() 将 JSON 从 MongoDB 流式传输到 S3