2017-12-05 6 views
0

In xmlslurper(), gibt es eine Möglichkeit, den übergeordneten Knoten vom aktuellen Knoten mithilfe von parent() abzurufen. Beispiel:Wie bekomme ich den Elternknoten vom aktuellen Knoten in JSON?

def text = ''' 
    <list> 
     <technology> 
      <name>Groovy</name> 
     </technology> 
    </list> 
''' 

def list = new XmlSlurper().parseText(text) 
println list.technology.name.parent().name() 

Ausgang: technology
Gibt es eine Methode, um den übergeordneten Knoten in json Datei zu erhalten, wie oben gezeigt, während jsonslurper() wiht groovy verwenden.

Update 1:

{"menu": { 
    "items": [ 
     { 
      "name":"coke", 
      "qty": 2, 
      "category":0, 
      "sizes":["small","large"] 
     }, 
     { 
      "name":"pizza", 
      "qty": 1, 
      "category":1, 
      "sizes":["medium"] 
     } 
    ], 
}} 

In diesem json Meine aktuellen Code Variable Datei,

def json = new JsonSlurper().parse(new File (filename)) 
def var= json.menu.items.sizes // I can't change this 

Hier möchte ich Ausgabe drucken, wie,

coke,2,0,small 
coke,2,0,large 
pizza,1,1,medium 
+0

@tim_yates Hier habe ich meine Anforderung aktualisiert. Zu diesem Zweck wurde diese "Elterneinrichtung" benötigt. –

+0

Sie können einfach zu "items" gehen und dann die Größen iterieren, um diese Ausgabe zu erhalten. Das Ergebnis von JsonSlurper sind im Grunde genommen nur Maps und wissen daher nicht, wo sie sich in einer größeren Hierarchie befinden. – cfrick

Antwort

-1

Dies ist eine alte Frage, aber als ich darauf stieß, auf der Suche nach einer Antwort, die ich dachte, werde ich füge meine Antwort dazu hinzu, um anderen zu helfen, sobald sie das gleiche Problem haben.

Ich habe eine Struktur wie folgt aus:

var structure = { 
    "root":{ 
     "name":"Main Level", 
     nodes:{ 
      "node1":{ 
       "name":"Node 1" 
      }, 
      "node2":{ 
       "name":"Node 2" 
      }, 
      "node3":{ 
       "name":"Node 3" 
      } 
     } 
    } 
} 

Derzeit von einer der Unterknoten Referenzierung ich weiß nicht, wie den übergeordneten Knoten mit seinem Namen Wert „Main Level“ zu erhalten.

Jetzt führe ich eine rekursive Funktion ein, die die Struktur reist und jedem Knotenobjekt ein Elternattribut hinzufügt und es mit seinem Elternteil ähnlich füllt.

Dann rufe ich nur diese Funktion und kann jetzt das übergeordnete Element des aktuellen Knotens in diesem Objektbaum abrufen.

Wenn ich jetzt einen Verweis auf den Sekundenunterknoten von root habe, kann ich einfach anrufen.

var node2 = structure.root.nodes["node2"]; 
console.log(node2.parent.name); 

und es wird "Main Level" ausgeben.

Hoffe, das hilft.

+1

Ich habe die gleiche Technik selbst benutzt. Es funktioniert natürlich nur, wenn Sie wissen, dass die Struktur ein Baum ist, in dem jede erreichbare Karte nur ein Elternteil hat (was der Fall sein wird, wenn die Struktur direkt aus JSON erstellt wurde, aber nicht anders). Im schlimmsten Fall wird Ihre rekursive Funktion nicht beendet, wenn die Datenstruktur Zyklen enthält. –

Verwandte Themen