2016-05-31 72 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