Seite 1 von 1
Erledigt: Zugriff auf JSON Element
Verfasst: Mittwoch 15. Juli 2020, 09:05
von CoderGirl
Hallo
ich habe eine Frage zum Zugriff auf ein JSON-Element.
Folgendes Beispiel
Code: Alles auswählen
{
"firstName": "Jane",
"lastName": "Doe",
"hobbies": ["running", "sky diving", "singing"],
"age": 35,
"children": [
{
"firstName": "Alice",
"age": 6
},
{
"firstName": "Bob",
"age": 8
}
]
}
Wie greif ich auf das Alter von Bob zu?
Bisher habe ich es immer über ein dict gemacht, aber da waren dann die Keys eindeutig. Danke
Codergirl
Re: Zugriff auf JSON Element
Verfasst: Mittwoch 15. Juli 2020, 09:14
von sparrow
Das schöne an JSON ist, dass es in der Notation ziemlich identisch zu den Datenstrukturen in Python ist:
Code: Alles auswählen
>>> data = {
"firstName": "Jane",
"lastName": "Doe",
"hobbies": ["running", "sky diving", "singing"],
"age": 35,
"children": [
{
"firstName": "Alice",
"age": 6
},
{
"firstName": "Bob",
"age": 8
}
]
}
>>> data
{'firstName': 'Jane', 'lastName': 'Doe', 'hobbies': ['running', 'sky diving', 'singing'], 'age': 35, 'children': [{'firstName': 'Alice', 'age': 6}, {'firstName': 'Bob', 'age': 8}]}
>>> data["children"]
[{'firstName': 'Alice', 'age': 6}, {'firstName': 'Bob', 'age': 8}]
>>> data["children"][1]
{'firstName': 'Bob', 'age': 8}
Das ist also eine Verschachtelung von Listen und Wörterbüchern.
Wenn du gezielt nach "Bob" suchst, müsstest du die Elemente in "children" durchgehen und dir die Namen anschauen, ob der passende dabei ist.
Re: Erledigt: Zugriff auf JSON Element
Verfasst: Mittwoch 15. Juli 2020, 09:17
von CoderGirl
Ich habe den Zugriff hinbekommen . Ich kann analog eines Dict auf ["children"][1]["age"] zugreifen

Re: Erledigt: Zugriff auf JSON Element
Verfasst: Mittwoch 15. Juli 2020, 09:43
von __blackjack__
@CoderGirl: Wobei Du damit auf das Alter des zweiten Kinds zugreifst, ob das nun Bob heisst oder nicht. Falls das mit dem Namen wichtig ist, siehe sparrow's Antwort.
Re: Erledigt: Zugriff auf JSON Element
Verfasst: Mittwoch 15. Juli 2020, 10:30
von snafu
Zur Veranschaulichung:
Code: Alles auswählen
for child in data["children"]:
if child["firstName"] == "Bob":
print(child)
Re: Erledigt: Zugriff auf JSON Element
Verfasst: Mittwoch 15. Juli 2020, 12:55
von CoderGirl
Danke euch, aber aktuell ist das JSO quasi-statisch und da geht es auch per INDEX.
Ansonsten muss ich durchgehen, das ist klar

Re: Erledigt: Zugriff auf JSON Element
Verfasst: Mittwoch 15. Juli 2020, 13:23
von Sirius3
Falsche Einstellung. Aktuell scheint das so zu funktionieren, später wenn sich daran etwas ändert, merkst Du das gar nicht und Du bekommst falsche Ergebnisse.
Re: Erledigt: Zugriff auf JSON Element
Verfasst: Sonntag 19. Juli 2020, 12:25
von __blackjack__
Code: Alles auswählen
#!/usr/bin/env python3
from glom import Check, glom, Iter, SKIP
def main():
data = {
"firstName": "Jane",
"lastName": "Doe",
"hobbies": ["running", "sky diving", "singing"],
"age": 35,
"children": [
{"firstName": "Alice", "age": 6},
{"firstName": "Bob", "age": 8},
],
}
bobs_age = glom(
data,
(
"children",
Iter().first(Check("firstName", equal_to="Bob", default=SKIP)),
"age",
),
)
print(bobs_age)
if __name__ == "__main__":
main()