2016-05-02 3 views
0

Ich habe eine JSON-Datei, die ich aus einem Webdienst gezogen habe und versuche, sie zu parsen. Ich sehe, dass diese Frage eine ganze Menge gestellt wurde, und ich habe gelesen, was immer ich finden konnte, aber die JSON-Daten in jedem Beispiel scheinen sehr simpel zu sein. Ebenso sind die JSON-Beispieldaten in den Python-Dokumenten sehr einfach und spiegeln nicht wider, womit ich arbeiten möchte. Hier ist, was die json wie folgt aussieht:Indexe in JSON in Python auflisten

{"RecordResponse": { 
"Id": blah 
"Status": { 
"state": "complete", 
"datetime": "2016-01-01 01:00" 
}, 
"Results": { 
"resultNumber": "500", 
"Summary": [ 
    { 
    "Type": "blah", 
    "Size": "10000000000", 
    "OtherStuff": { 
    "valueOne": "first", 
    "valueTwo": "second" 
    }, 
"fieldIWant": "value i want is here" 

Der Codeblock in Frage:

jsonFile = r'C:\Temp\results.json' 

with open(jsonFile, 'w') as dataFile: 
    json_obj = json.load(dataFile) 
    for i in json_obj["Summary"]: 
     print(i["fieldIWant"]) 

Ich bin nicht nur nicht in das Feld immer ich will, aber ich bin auch ein Schlüsselfehler bekommen bei dem Versuch, "Zusammenfassung" auszusprechen.

Ich weiß nicht, wie die Indizes innerhalb des Arrays arbeiten; Wenn ich einmal in das Feld "Zusammenfassung" komme, muss ich manuell einen Index ausgeben, um den Wert aus dem Feld, das ich brauche, zurückzugeben?

+2

Der von Ihnen angegebene JSON ist nicht gültig. Ich sehe nichts, was mit der Zeit falsch wäre. Wenn Sie ein gültiges JSON-Beispiel zur Verfügung stellen könnten, würde ich das persönlich hilfreicher finden. – Kelvin

+0

Meinst du, dass die JSON-Datei nicht ordnungsgemäß beendet ist? Ich habe das ganze nicht bereitgestellt, weil es ziemlich lang ist. Oder sagst du, dass mit der dargestellten Struktur etwas nicht stimmt? Und wenn ja, was ist das? – auslander

Antwort

0

Das Beispiel, das Sie gepostet haben, ist kein gültiger JSON (keine Kommas nach Objektfeldern), daher ist es schwierig, sich einzuprägen. Wenn es direkt vom Webservice kommt, ist etwas durcheinander. Wenn Sie es mit der richtigen Kommas haben zu beheben, ist die „Zusammenfassung“ Schlüssel in der „Ergebnisse“ Objekt, so dass Sie Ihre Schleife

with open(jsonFile, 'w') as dataFile: 
    json_obj = json.load(dataFile) 
    for i in json_obj["Results"]["Summary"]: 
     print(i["fieldIWant"]) 

zu ändern brauchen würde, wenn Sie nicht die Struktur wissen überhaupt, Sie können das resultierende Objekt rekursiv durchsehen:

def findfieldsiwant(obj, keyname="Summary", fieldname="fieldIWant"): 
    try: 
     for key,val in obj.items(): 
     if key == keyname: 
      return [ d[fieldname] for d in val ] 
     else: 
      sub = findfieldsiwant(val) 
      if sub: 
       return sub 
    except AttributeError: #obj is not a dict 
     pass 
    #keyname not found 
    return None 
+0

Tut mir leid, tippte zu schnell. Ich habe das JSON-Beispiel repariert. – auslander

+0

Ok, das hat geholfen. Es befindet sich innerhalb von 'Results' innerhalb von' RecordResults'. Sobald ich sagte "für i in json_obj [" RecordResults "] [" Ergebnisse "] [" Zusammenfassung "]', dann gab es mir die Werte, die ich wollte. Danke für die Hilfe! – auslander