2017-04-06 80 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?