2016-05-31 76 views
-1

对象我有如下深层嵌套JSON结构:阵列的JavaScript从JSON

[ 
    { 
    "ATA": "49", 
    "Description": "APU", 
    "MSI": "", 
    "Level":"1", 
    "ChildNodes": { 
     "Nodes": [ 
      { 
       "ATA": "49-10", 
       "Description": "Power Plant", 
       "MSI": "", 
       "Level":"2", 
       "ChildNodes": { 
        "Nodes": [ 
         { 
          "ATA": "49-13", 
          "Description": "APU Mounts", 
          "MSI": "Yes", 
          "Level":"3", 
          "ChildNodes": { 
           "Nodes": [ 
            { 
             "ATA": "49-13-01", 
             "Description": "APU Gearbox Mount Bracket", 
             "MSI": "Yes", 
             "Level":"4" 
            }] 
          } 
         } 
        ] 
       } 
      } 
     ] 
    }   
} 

] 

我试图下面转换成以下形式的阵列,用于该数据的更容易的加工中,以显示表格格式:

[{ATA:"49",Description:"APU",MSI:""},{ATA:"49-10",Description:"PowerPlant",MSI:""}]... 

我已经尝试了很多办法,虽然我可以得到所有的键/值对,我无法弄清楚如何做到这一点。我无法更改JSON,因为所有子节点都有依赖关系。有任何想法吗?

编辑:我试过以下解决方案获取所有键/值对:Traverse all the Nodes of a JSON Object Tree with JavaScript但我无法找出何时开始一个新的对象。

+5

[你尝试过什么(http://whathaveyoutried.com),同时试图解决问题了吗? – zzzzBov

+0

@zzzzBov更新了问题。 – Akhoy

回答

3

您应该使用这个递归函数:

function processNodes(nodes, output){ 
    for (var i = 0, l = nodes.length; i < l; ++i){ 
     output.push({ 
      "ATA": nodes[i]["ATA"], 
      "Description": nodes[i]["Description"], 
      "MSI": nodes[i]["MSI"] 
     }); 
     if (nodes[i]["ChildNodes"]){ 
      processNodes(nodes[i]["ChildNodes"]["Nodes"], output); 
     } 
    } 
} 

然后:

var json = JSON.parse(...); 
var output = []; 
processNodes(json, output); 
console.log(output); 
+1

实现小提琴:https://jsfiddle.net/thatOneGuy/ee3tj7L7/ – thatOneGuy

+1

感谢您的帮助。有用。看到这个后,我感觉非常笨... – Akhoy

+0

有没有办法在将父节点推送到输出数组之前将其传递给对象? – Akhoy