Seite 1 von 1

Json File mit Python auslesen

Verfasst: Dienstag 4. Oktober 2022, 23:00
von norbert7
hallo liebes forum,

ich beschäftige mich gerade mit python. unter anderem muss ich auch Json Files
auslesen. was auch ganz gut funktioniert. doch mein vorhaben übersteigt mein wissen.

was ich benötige:

ich möchte gern das alter von hermann angezeigt bekommen,

kann mir jemand helfen
vielen dank




Json file:
----------------

{
"status": "ok",
"data": {
"jahr": 2022,
"land": "deutschland",
"kunden":
[
{
"name": "müller",
"alter": "44",
},
{
"name": "hermann",
"alter": "55",
},
{
"name": "maier",
"alter": "66",
}
]
}
}





Code:
----------------

das_file = json.loads(response.text)

for num in das_file['data']['kunden']:
print("ergebnis:", num['name'])



AUSGABE:
----------------

ergebnis: müller
ergebnis: hermann
ergebnis: maier

Re: Json File mit Python auslesen

Verfasst: Mittwoch 5. Oktober 2022, 05:35
von Sirius3
Variablennamen sind wichtig für das Verständnis. das_file ist ihr was wie Kundendaten. Und wie kommt man darauf Kunden num zu nennen?
Ein response-Objekt hat eine json-Methode.

Code: Alles auswählen

kundendaten = response.json()

for kunde in kundendaten['data']['kunden']:
    print("ergebnis:", kunde['name'])
Das was Du suchst ist die if-Abweisung, mit der Du den Kundennamen mit 'Hermann" vergleichen kannst.

Re: Json File mit Python auslesen

Verfasst: Mittwoch 5. Oktober 2022, 05:38
von sparrow
Grundsätzlich solltest du deinen Code immer in Code-Tags setzen damit die Einrückung erhalten bleibt.
Die Code-Tags werden automatisch eingefügt, wenn du den </> Button im vollständigen Editor drückst.

Du hast mit dem json-Modul erfolgreich in Python Datenstrukturen übertragen. Und du weißt offensichtlich, wie man die Namen aus dieser Struktur ausliest. Woran genau scheitert jetzt der Zugriff auf das Alter?

Der Umgang mit Datenstrukturen wie dicts ist in Python essentiell. Die offizielle Dokumentation enthält auch ein recht gutes Tutorial. Das ist ein guter Einstieg um Python zu lernen.

Re: Json File mit Python auslesen

Verfasst: Mittwoch 5. Oktober 2022, 09:34
von norbert7
hier die json-file in besserer form.

wie ich mich durch die einzelnen arrays und objekte hangle habe ich herausgefunden,
so erhalte ich alle namen der kunden in der json-file:

Code: Alles auswählen

daten = json.loads(response.text)

for kunde in daten ['data']['kunden']:
    print("ergebnis:", kunde['name'])


ich möchte jedoch gezielt nach einem kunden suchen (welcher mir bekannt ist) und das dazugehörige alter ausgeben
es soll also nur das alter von hermann ausgeben werden.
mit anderen worten: wie alt ist hermann?

das ich das irgedwie vergleichen muss, ist mir bewusst, aber ich weist nicht wie. deshalb hier die frage im forum.


gibt es einen pfiffigen, der mir das lösen kann?
vielen dank!


Code: Alles auswählen

{
    "status": "ok",
    "data": {
        "jahr": 2022,
        "land": "deutschland",
        "kunden":
                        [
                            {
                                "name": "müller",
                                "alter": "44",
                            },
                            {
                                "name": "hermann",
                                "alter": "55",
                            },
                            {
                                "name": "maier",
                                "alter": "66",
                            }
                        ]
            }
}

Re: Json File mit Python auslesen

Verfasst: Mittwoch 5. Oktober 2022, 09:52
von __deets__
Wenn du schon durch alles Kunden läufst, fehlt doch nur noch der Vergleich des Namens mit dem gesuchten Namen, und wenn das passt, dann das Alter ausgeben. Und ganz grundsätzlich liefern wir hier keine fertigen Hausaufgaben ab.

Re: Json File mit Python auslesen

Verfasst: Mittwoch 5. Oktober 2022, 10:14
von norbert7
ich frage ja nicht umsonst im forum.
ansonsten könnte ich auch 2 bücher lesen. doch leider habe ich diese zeit nicht.

vielleicht findet sich ja hier doch jemand, der mir unkompliziert helfen kann.
danke!

Re: Json File mit Python auslesen

Verfasst: Mittwoch 5. Oktober 2022, 11:14
von Dennis89
Hallo,

du brauchst keine zwei Bücher. Wann willst du das Alter ausgeben? *Wenn* der Name gleich "Hermann" ist.
Übersetze die Antwort mal ins englische und schau nach, welche Zeichen man für eine "ist-gleich" Frage einsetzt.

Du verlierst mehr Zeit, in dem du auf eine fertige Lösung wartest.

Grüße
Dennis

Re: Json File mit Python auslesen

Verfasst: Mittwoch 5. Oktober 2022, 11:47
von norbert7

Code: Alles auswählen


daten = json.loads(response.text)

for kunde in daten ['data']['kunden']:
       gesuchter_name = kunde['name']
	if (gesuchter_name=="hermann"):
	
   


weiter weiß ich nicht,
ich müsste ja jetzt weitersuchen, ohne wieder die komplette "daten" json zu durchlaufen
quasie nur nach dem nächstfolgenden objekt [alter]

Re: Json File mit Python auslesen

Verfasst: Mittwoch 5. Oktober 2022, 11:55
von __deets__
Schleifen kann man abbrechen. Mit break. Oder man packt das ganze in eine Funktion, die man bei gefundenem Namen mit “return alter” verlässt.

Re: Json File mit Python auslesen

Verfasst: Mittwoch 5. Oktober 2022, 12:57
von Sirius3
Du benutzt immer noch loads statt response.json(). Warum?

Du mußt nichts mehr Suchen, denn das "nächstfolgende objekt" [alter] ist im selben Wörterbuch wie der Name, nämlich im Objekt `kunde`. Wenn Du weißt, wie Du an den Namen kommst, dann kennst Du auch das Alter.

Re: Json File mit Python auslesen

Verfasst: Mittwoch 5. Oktober 2022, 13:41
von norbert7
habs gelöst,

nach bestätigung ob name hermann ist, einfach als nächstes das alter objekt ausgegeben
die schleife läuft ja einfach weiter....

danke

Re: Json File mit Python auslesen

Verfasst: Mittwoch 5. Oktober 2022, 21:13
von __blackjack__
Mal mit Kanonen auf Spatzen geschossen: Mit `glom` erst einmal geprüft ob das was wir da bekommen ein gewisses Format erfüllt, und dann die interessanten Daten extrahiert und passend für einen einfachen Wörterbuchzugriff umgebaut:

Code: Alles auswählen

#!/usr/bin/env python3
import requests
from glom import Iter, Match, Spec, glom, merge


def main():
    # response = requests.get(
    #     "http://www.example.com/example.json", timeout=None
    # )
    # response.raise_for_status()
    # data = response.json()

    data = {
        "status": "ok",
        "data": {
            "jahr": 2022,
            "land": "deutschland",
            "kunden": [
                {"name": "müller", "alter": "44"},
                {"name": "hermann", "alter": "55"},
                {"name": "maier", "alter": "66"},
            ],
        },
    }
    #
    # Daten validieren.
    #
    data = Match(
        {
            "status": "ok",
            "data": {
                "jahr": int,
                "land": str,
                "kunden": [{"name": str, "alter": str}],
            },
        }
    ).verify(data)
    #
    # Interessanten Teil der Daten extrahieren/konvertieren/umstrukturieren.
    #
    name_to_age = glom(
        data,
        (
            "data.kunden",
            Iter({Spec("name"): ("alter", int)}),
            merge,
        ),
    )
    print(name_to_age)
    #
    # Gewünschtes Datum ausgeben.
    #
    print(name_to_age["hermann"])


if __name__ == "__main__":
    main()
Ausgaben:

Code: Alles auswählen

{'müller': 44, 'hermann': 55, 'maier': 66}
55