2017-04-06 79 views
0

我有一个服务输出的文件目录,每个文件都没有扩展名。实施例的文件名: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

一次读取文件一行,解析每行并附加到数组(或现场处理)node.js文档有一个示例。 –

回答

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); 

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