2017-11-30 2 views
0

So habe ich eine JSON, das wie folgt aussieht:Looping über verschachtelte JSON Elemente

[ 
    { 
    "Domain": "apple.com", 
    "A": [ 
     "17.142.160.59", 
     "17.172.224.47", 
     "17.178.96.59" 
    ], 
    "NS": [ 
     "c.ns.apple.com.", 
     "b.ns.apple.com.", 
     "a.ns.apple.com.", 
     "f.ns.apple.com.", 
     "nserver5.apple.com.", 
     "nserver6.apple.com.", 
     "d.ns.apple.com.", 
     "e.ns.apple.com." 
    ] 
    } 
] 

Während ich die verschachtelten Informationen manuell wie nämlich abrufen kann.

print(data[0]["Domain"]) --- Returns: apple.com 
print(data[0]["A"][0]) --- Returns: 17.142.160.59 

Wie kann ich Schleife durch die Informationen, die mir die Domain abrufen lassen, die die verschachtelten A information, the nested NS` Informationen usw.?

Ich habe versucht, dies zu tun:

for i in data["Domain"]: 
    print(data[i]["Domain"]) 
    for j in ... // could not figure out, either way first loop fails. 

vergeblich. Danke für jede Hilfe!

+0

So etwas wie in [dieser Antwort] (https://stackoverflow.com/a/14059645/355230) von mir könnte angepasst werden, um dies zu tun (denke ich). – martineau

+0

@martineau Ich war dort sowie https://stackoverflow.com/questions/14547916/how-can-i-loop-over-entries-in-json, aber immer noch nicht herausfinden konnte. Dies ist das erste Mal, dass ich mit Python und Json in Python arbeite. –

Antwort

1

Ihr data Wert von JSON kommt ein sein würde Liste, so dass Sie über die Wörterbücher iterieren können, die es mit einer for Schleife enthält:

for inner in data: 

Dann können Sie einfach inner['Domain'] oder inner['A'] verwenden, um die Werte mit den Tasten zugeordnet zugreifen, die Sie wollen. Um über die A-Datensätze zu iterieren, verwenden Sie eine andere Schleife unter inner['A'].

Hier ist eine Reihe von verschachtelten Schleifen, die ich denke, das tut, was Sie wollen:

for inner in data: 
    print("Domain:", inner['Domain']) 
    for ip in inner['A']: 
     print(" IP:", ip) 
    for ns in inner['NS']: 
     print(" NS:", ns) 

Sie können natürlich etwas anderes tun, mit den Daten, anstatt sie zu drucken.

1

Sie können so etwas tun:

def get_values(data, scope=None): 
    for entry in data: 
     for prop, value in entry.items(): 
      if scope is not None and prop != scope: 
       continue 
      if not isinstance(value, list): 
       yield value 
      else: 
       for elem in value: 
        yield elem 

Und dann:

for value in get_values(data): 
    print(value) 

Sie können auch:

for value in get_values(data, scope="NS"): 
    print(value)