2016-05-31 5 views
-1

ich eine tief verschachtelte JSON-Struktur haben, wie unten:Array von JavaScript-Objekte aus 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" 
            }] 
          } 
         } 
        ] 
       } 
      } 
     ] 
    }   
} 

] 

Ich versuche, die folgende in ein Array von der Form für eine leichtere Verarbeitung dieser Daten in eine zeigen, zu konvertieren Tabellenformat:

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

ich habe viele Möglichkeiten ausprobiert und obwohl ich alle Schlüssel/Wert-Paare bekommen kann, kann ich nicht herausfinden, wie dies zu tun. Ich kann den JSON nicht ändern, da alle untergeordneten Knoten Abhängigkeiten haben. Irgendwelche Ideen?

Edit: Ich versuchte die folgende Lösung, um alle Schlüssel/Wert-Paare zu erhalten: Traverse all the Nodes of a JSON Object Tree with JavaScript, aber ich kann nicht herausfinden, wann ein neues Objekt zu starten.

+5

[Was haben Sie versucht] (http://whathaveyoutried.com) bei dem Versuch, das Problem zu lösen? – zzzzBov

+0

@zzzzBov aktualisierte Frage. – Akhoy

Antwort

3

Sie sollten eine rekursive Funktion für diesen Einsatz:

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); 
     } 
    } 
} 

Dann:

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

Implementierte Geige: https://jsfiddle.net/thatOneGuy/ee3tj7L7/ – thatOneGuy

+1

Danke für die Hilfe. Es klappt. Ich fühle mich ziemlich dumm, nachdem ich das gesehen habe ... – Akhoy

+0

Gibt es eine Möglichkeit, den Elternknoten an das Objekt zu übergeben, bevor es in das Ausgabearray geschoben wird? – Akhoy