JSON - auf einzelne Felder zugreifen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
torsten_156
User
Beiträge: 43
Registriert: Freitag 5. April 2019, 20:10

Hallo,

ich lese mit "json.loads(myContent)" einen Datenstrom ein. Dieser besteht aus mehreren Feldern.
Ein Beispiel:

Code: Alles auswählen

{\\"werk\\":\\"X\\",\\"bldat\\":\\"X\\",\\"obart\\":\\"X\\",\\"objid\\":\\"X\\"}
Ich kann mir diesen gesamten Inhalt jetzt anzeigen lassen:

Code: Alles auswählen

print(myData["E_JSON"])
Jetzt möchte ich allerdings nur den Wert für "werk" erhalten. In diesem Beispiel ist es ja "X". Wie mache ich das am besten?

Vielen Dank
Torsten
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Lass erstmal diese unnötigen my-Präfixe weg; solange es nicht auch ein herContent gibt.
Wenn ich das richtig sehe, dann ist in E_JSON ein als String gespeichertes JSON enthalten. Dann mußt Du nur json.loads darauf anwenden.
torsten_156
User
Beiträge: 43
Registriert: Freitag 5. April 2019, 20:10

Das siehst du richtig. Habe bereits ein json.loads angewendet:

Code: Alles auswählen

if response.status_code == 200:
    content = response.content
    J_Data = json.loads(content)
    print(J_Data["E_JSON"])
Somit wird ja der JSON-Stream in mein "J_Data" geschoben. Aber wie erhalte ich jetzt den Zugriff auf einen einzelnen Schlüssel?
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn Du eine requests-Antwort hast, dann benutze direkt json.

Code: Alles auswählen

content = response.json()
und dann hast Du in Deinen Daten nochmal json:

Code: Alles auswählen

data = json.loads(content["E_JSON"])
torsten_156
User
Beiträge: 43
Registriert: Freitag 5. April 2019, 20:10

Ok, habe es dann so geändert:

Code: Alles auswählen

if response.status_code == 200:
    content = response.json()
    print(content)
Ok, in content steht nun der JSON-Stream. Aber die Frage bleibt noch immer, wie kann ich euf genau ein Feld des Streams zugreifen?

VG
Torsten
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich kann auch nochmal zum dritten mal das selbe schreiben: Du mußt den String aus content["E_JSON"] nochmal json-Dekodieren.
torsten_156
User
Beiträge: 43
Registriert: Freitag 5. April 2019, 20:10

Es läuft:

Code: Alles auswählen

if response.status_code == 200:
    content = response.json()
    data = json.loads(content["E_JSON"])
    
    for val in data:
        print(val['werks'])
VIELEN Dank und Grüße
Torsten
Antworten