2017-10-05 119 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的对象)。 –