【问题标题】:Externally save specific value (one HUGE array) of a Huge JSON file - Node外部保存一个巨大 JSON 文件的特定值(一个巨大的数组) - 节点
【发布时间】:2019-09-29 13:42:09
【问题描述】:

所以我有一个 HUGE JSON 外部文件,我想在我的 nodejs 项目中读取它并保存特定 keyvalue将该 JSON 文件复制到另一个外部 JSON 文件,其中 value 本身就是一个 HUGE 数组。

输入 JSON 的一般结构:

{
    key1: val1, 
    key2: val2, 
    key3: [val3_1, val3_2, ...],
    key4: {
               key4_1: val4_1,
               key4_2: [val4_2_1, val4_2_2, ...]
          } 
    ...
}

我不确定是否逐行阅读,因为我几乎在任何地方都阅读过 HUGE JSON,这是一种继续进行的方式,因为我想以某种方式执行搜索操作。

【问题讨论】:

  • 您说(在对我已删除答案的评论中)您尝试使用流式 JSON 解析器来处理此问题并收到错误“错误:顶级对象应该是一个数组”。我建议显示该代码,因为我很确定只是您错误地使用了该库。显然很多 JSON 文件都有一个顶级对象而不是顶级数组。

标签: arrays node.js json


【解决方案1】:

所以,感谢@T.J.Crowder,我设法找到了我正在执行的错误方法调用。现在有一个工作代码:

const StreamObject = require('stream-json/streamers/StreamObject');
const fs = require('fs');
const _ = require('underscore');
const jsonStream = StreamObject.withParser();

var inputfile = "~Path/5cd792a633e32a6e5e20e56a.geojson";
var outputfile = "~Path/5cd792a633e32a6e5e20e56a.json";

var outstream = fs.createWriteStream(outputfile);
outstream.writable = true;

jsonStream.on('data', ({key, value}) => {
    if (_.difference(['features'], Object.keys(value)).length === 0 ){
        outstream.write(JSON.stringify(Object.values(value['features'])));
    }
});

jsonStream.on('end', () => console.log('Done Export!'));

fs.createReadStream(inputfile).pipe(jsonStream.input);

基本上,我所做的只是读取本地存储的geojson file 并将 data['data']['features'] 数组导出到另一个外部 json 文件。这只是一个示例,geojson 和导出的数组/json 可能会变得非常大。

现在,虽然我设法通过合并不同的 stackoverflow 帖子来实现它,但不确定它是否应该做正确的工作并且整个数组没有立即存储在 RAM 中。特别是,if 语句的方式被用于写入输出。如有必要,请更正代码。

谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 2010-09-07
    相关资源
    最近更新 更多