从外部保存巨大JSON文件的特定值(一个HUGE数组)-节点

时间:2019-05-12 09:55:25

标签: arrays node.js json

所以我有一个巨大 JSON外部文件,我想在我的nodejs项目中读取该文件,并从中保存特定 key value 将该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,这是我想以某种方式执行搜索操作时继续进行的一种方式。

1 个答案:

答案 0 :(得分:0)

因此,感谢@ 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和导出的array / json可能会变得很大。

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

谢谢!