【问题标题】:Using JSONStream to read large JSON files使用 JSONStream 读取大型 JSON 文件
【发布时间】: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)”。 我能做些什么来完成这项工作?

【问题讨论】:

    标签: javascript json parsing jsonstream


    【解决方案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 :/
    猜你喜欢
    • 1970-01-01
    • 2018-08-14
    • 2023-04-05
    • 2014-05-19
    • 1970-01-01
    • 2023-04-09
    • 2015-12-23
    • 2021-09-02
    • 2019-10-21
    相关资源
    最近更新 更多