node.js - 遍历未命名的对象

时间:2017-04-06 21:14:13

标签: json node.js

我有一个服务输出的文件目录,每个文件都没有扩展名。示例文件名:

all_events_20170406v1
all_events_20170406v2

在每个文件中有几个未命名的JSON对象,例如:

{"event":"event1","id":"123"}
{"event":"event2","id":"456","test":"text","foo":"bar"}

使用node.js我想遍历每个文件,然后在文件的每个对象中,然后捕获重复数据删除的密钥名称。我无法弄清楚如何阅读未命名的对象。

我需要的输出是:

event
id
test
foo

任何建议?

1 个答案:

答案 0 :(得分:0)

好的,使用glob模块(npm install glob):

let result = []; 
const files = glob.sync('*', { cwd: 'my_folder' });
for (const filename of files) {
    const filePath = 'my_folder/' + filename;
    const content = fs.readFileSync(filePath, 'utf8');
    const lines = content.split('\n');
    const objects = lines.map(line => JSON.parse(line));

    for (const object of objects) {
        for (const key in object) {   // pay attention that "in" used here
            if (Object.hasOwnProperty(key) && result.indexOf(key) === -1) result.push(key);
        }
    }
}
console.dir(result);

免责声明:此代码未经过测试。仅供参考。此外,这里我们一次读取整个文件,这对于mid-mid文件是可以的。如果使用较大的文件,请使用readline模块。有关详细信息,请参阅Read a file one line at a time in node.js?