2017-10-05 70 views
-1

需要幫助解析嵌套數組成使用Node.js的單獨的對象非常感謝幫助。解析嵌套JSON數組成單獨的JSON對象與Node.js的


我需要在最終輸出 -

"Status": "0", 
"Message": "OK", 
"Count": "3724", 

我需要有以下作爲單獨的JSON對象 -

  • InvoiceRecords(出現一個沒有這些time in json)
  • InvoiceRecordHeaderDetails(發生m在JSON ultiple倍)
  • InvoiceRecordSplitDetails(發生在JSON多次)
  • InvoiceRecordLineItemDetails(發生在JSON多次)
  • InvoiceTaxCodeDetails(發生在JSON多次)

具有以下JSON數據樣本(截斷):

{ 
"Status": "0", 
"Message": "OK", 
"Count": "3724", 
"InvoiceRecords": [ 
    { 
     "InvoiceDate": "8/9/2017 12:00:00 AM", 
     "InvoiceLocation": "002", 
     "InvoiceNumber": "2004085", 
     "InvoiceRecordHeaderDetails": [ 
      { 
       "InvNum": "2004085", 
       "Location": "002", 
       "InvDate": "8/9/2017 12:00:00 AM" 
      } 
     ], 
     "InvoiceRecordSplitDetails": [ 
      { 
       "UniqueID": "1757391", 
       "InvNum": "2004085", 
       "Location": "002", 
       "InvoiceDate": "8/9/2017 12:00:00 AM" 
      } 
     ], 
     "InvoiceRecordLineItemDetails": [ 
      { 
       "UniqueID": "3939934", 
       "InvNum": "2004085", 
       "Location": "002", 
       "InvoiceDate": "8/9/2017 12:00:00 AM" 
      } 
     ], 
     "InvoiceTaxCodeDetails": [ 
      { 
       "InvoiceDate": "8/9/2017 12:00:00 AM", 
       "Location": "002", 
       "InvNum": "2004085", 
      } 
     ] 
    } 
] 

}


更新2

@克里斯 - adorna

按照您的指示,(我認爲),但碰釘子(幫助?)

// Parse input file data as json 
var jsonContent = JSON.parse(fs.readFileSync(inputFile, 'utf8')); 

//1. Create 4 empty arrays, one each for record header, splits, line items and tax code details 
var recordHeader; 
var splits; 
var lineItems; 
var taxCodes; 

//2. Use a forEach function to iterate through InvoiceRecords 

var i; 
for (i = 0; i < jsonContent.length; i++) { 
    var record = jsonContent[i].InvoiceRecords; 
}; 
console.log(record); 

第2步沒有得到在控制檯中除'未定義'外的任何內容。 「每個陣列輸出到單個JSON文件」,嘗試沿着線的東西:

+0

當你說你需要那些發生多次作爲單獨的對象的事情,你的意思是對象作爲單獨的陣列?此外,它們是否出現多次,意味着每個數組都已經在輸入中,或者'InvoiceRecords'是一個數組,因此可以包含多個對象,每個對象都有自己的'InvoiceRecordHeaderDetails'數組? (順便說一句,[不存在「json對象」](http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/) ) – nnnnnn

+0

對不起,我很新。 InvoiceRecords數組是各種發票的清單。給定的發票將包含1個標題,1個或多個分組(將付款分攤到付款人),1個或多個行項目(銷售多個產品)以及1個或多個稅碼詳細信息(每個行項目的稅額) – jag959

+0

我認爲您需要以顯示期望的輸出應該是什麼樣子,因爲從我的言辭中我不清楚。 – jfriend00

回答

0

考慮您的問題從字面上看,尤其是這部分

  1. 創建4個空數組,分別用於記錄頭,分裂,線 項目和稅法細節
  2. 使用forEachfunction通過InvoiceRecords
  3. 迭代對於每個iteratee對象,使用for...ofstatement通過迭代
  4. 使用條件表達式,如果鍵===目標(即 'InvoiceTaxCodeDetails'push值到適當的 陣列
  5. 一旦forEach功能已經完成,then使用本機fs 模塊,每個陣列的內容寫入到一個JSON文件
+0

請參閱上面的「更新2」。 – jag959

+0

'var record'在'for'循環中定義。因此,在console.log(record)中''record' ;''將被定義爲'undefined',因爲你在循環外部調用它。這是JS'範圍規則的一部分。在一個相關的不是,'var i'應該在你的括號裏面聲明,例如'for(var i')。如果不是,'i'將在你的腳本中被全局範圍化,你可能會遇到各種各樣的副作用 –

+0

另外,你不能以你想要的方式在一個對象上使用標準的'for'循環,它用於數組,這就是爲什麼我提出'forEach'函數,因爲它會遍歷一個對象。答案可以幫助你理解'forEach'是如何工作的,你也可以做一個[for(in)loop](https://stackoverflow.com/questions/684672/how-do-i-loop-through-or-enumerate-一個-JavaScript的對象)。 –