lehrkraefte:sbt:informatik-glf2-23:json_and_python

Jupyter Notebook dazu gibt es bei mir (sbt) auf Anfrage.

JSON steht für JavaScript Object Notation.

Es ist ein einfaches Textformat, um Daten zu speichern oder zwischen Programmen auszutauschen.

JSON sieht ähnlich aus wie Python-Datenstrukturen:

{
  "name": "Anna",
  "alter": 25,
  "hobbys": ["Lesen", "Sport", "Musik"]
}

In Python wird JSON häufig in folgende Datentypen umgewandelt:

JSON Python
Objekt {} Dictionary dict
Array [] Liste list
String String str
Zahl Integer oder Float
true / false True / False
null None

Mit json.loads() kann ein JSON-Text in ein Python-Objekt umgewandelt werden.

loads bedeutet ungefähr: load string, also einen JSON-Text laden.

import json
 
json_text = '''
{
  "name": "Anna",
  "alter": 25,
  "hobbys": ["Lesen", "Sport", "Musik"]
}
'''
 
daten = json.loads(json_text)
 
print(daten)

Ausgabe:

{'name': 'Anna', 'alter': 25, 'hobbys': ['Lesen', 'Sport', 'Musik']}

Das Ergebnis ist ein Python-dict → Dictionary

Ein dict besteht aus Schlüssel-Wert-Paaren.

Beispiel:

{'name': 'Anna', 'alter': 25}

Wenn das JSON-Objekt ein Dictionary ist, greift man mit dem Schlüssel auf Werte zu.

print(daten["name"])
print(daten["alter"])

Ausgabe:

Anna
25

Man kann Werte auch in Variablen speichern.

name = daten["name"]
alter = daten["alter"]
 
print(name)
print(alter)

Ausgabe:

Anna
25

JSON-Arrays werden in Python zu Listen.

In unserem Beispiel ist hobbys eine Liste.

hobbys = daten["hobbys"]
 
print(hobbys)

Ausgabe:

['Lesen', 'Sport', 'Musik']

Auf einzelne Listenelemente greift man über den Index zu.

Wichtig: Der erste Index ist 0.

print(daten["hobbys"][0])
print(daten["hobbys"][1])
print(daten["hobbys"][2])

Ausgabe:

Lesen
Sport
Musik

Mit einer for-Schleife kann man alle Elemente einer Liste ausgeben.

for hobby in daten["hobbys"]:
    print(hobby)

Ausgabe:

Lesen
Sport
Musik

Häufig besteht JSON aus einer Liste von Objekten.

Nach dem Einlesen ist das eine Python-Liste mit mehreren Dictionaries.

json_text = '''
[
  {
    "name": "Anna",
    "alter": 25
  },
  {
    "name": "Ben",
    "alter": 30
  },
  {
    "name": "Clara",
    "alter": 28
  }
]
'''
 
personen = json.loads(json_text)
 
print(personen)

Ausgabe:

[{'name': 'Anna', 'alter': 25}, {'name': 'Ben', 'alter': 30}, {'name': 'Clara', 'alter': 28}]

Zugriff auf das erste Objekt in der Liste:

print(personen[0])

Ausgabe:

{'name': 'Anna', 'alter': 25}

Zugriff auf einzelne Werte in den Objekten:

print("Name  der 1. Person: ", personen[0]["name"])
print("Alter der 2. Person: ", personen[1]["alter"])

Ausgabe:

Name  der 1. Person:  Anna
Alter der 2. Person:  30

Mit einer Schleife kann man jedes Dictionary in der Liste einzeln verarbeiten.

for person in personen:
    print(person["name"])

Ausgabe:

Anna
Ben
Clara

Man kann auch mehrere Werte ausgeben.

for person in personen:
    print(person["name"], person["alter"])

Ausgabe:

Anna 25
Ben 30
Clara 28

JSON kann verschachtelt sein.

Das bedeutet:

  • In Objekten können Listen liegen.
  • In Listen können Objekte liegen.
  • In Listen können weitere Listen liegen.
json_text = '''
{
  "klasse": "4xKS",
  "schueler": [
    {
      "name": "Anna",
      "noten": [1, 2, 2]
    },
    {
      "name": "Ben",
      "noten": [3, 2, 4]
    }
  ]
}
'''
 
daten = json.loads(json_text)
 
print(daten)

Ausgabe:

{'klasse': '4xKS', 'schueler': [{'name': 'Anna', 'noten': [1, 2, 2]}, {'name': 'Ben', 'noten': [3, 2, 4]}]}

Zugriff auf den Klassennamen:

print(daten["klasse"])

Ausgabe:

4xKS

Zugriff auf die Liste der Schüler:

print(daten["schueler"])

Ausgabe:

[{'name': 'Anna', 'noten': [1, 2, 2]}, {'name': 'Ben', 'noten': [3, 2, 4]}]

Zugriff auf den ersten Schüler:

print(daten["schueler"][0])

Ausgabe:

{'name': 'Anna', 'noten': [1, 2, 2]}

Zugriff auf den Namen des ersten Schülers:

print(daten["schueler"][0]["name"])

Ausgabe:

Anna

Zugriff auf die erste Note des ersten Schülers:

print(daten["schueler"][0]["noten"][0])

Ausgabe:

1

Die Struktur kann man so lesen:

daten["schueler"][0]["noten"][0]

Bedeutung:

daten["schueler"]  -> Schülerliste
[0]                -> erster Schüler
["noten"]          -> Notenliste dieses Schülers
[0]                -> erste Note

Auch Listen können weitere Listen enthalten.

Ein Beispiel dafür ist eine Matrix.

json_text = '''
{
  "matrix": [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
  ]
}
'''
 
daten = json.loads(json_text)
 
print(daten)

Ausgabe:

{'matrix': [[1, 2, 3], [4, 5, 6], [7, 8, 9]]}

Zugriff auf die erste innere Liste:

print(daten["matrix"][0])

Ausgabe:

[1, 2, 3]

Zugriff auf ein einzelnes Element:

print(daten["matrix"][1][2])

Ausgabe:

6

Erklärung:

daten["matrix"]    -> gesamte Matrix
[1]                -> zweite innere Liste: [4, 5, 6]
[2]                -> drittes Element dieser Liste: 6

Mit json.dumps() kann ein Python-Objekt wieder in JSON-Text umgewandelt werden.

dumps bedeutet ungefähr: dump string, also als JSON-Text ausgeben.

person = {
    "name": "Anna",
    "alter": 25,
    "hobbys": ["Lesen", "Sport", "Musik"]
}
 
json_text = json.dumps(person)
 
print(json_text)

Ausgabe:

{"name": "Anna", "alter": 25, "hobbys": ["Lesen", "Sport", "Musik"]}

Mit indent kann man JSON lesbarer ausgeben.

json_text = json.dumps(person, indent=2)
 
print(json_text)

Ausgabe:

{
  "name": "Anna",
  "alter": 25,
  "hobbys": [
    "Lesen",
    "Sport",
    "Musik"
  ]
}

Mit ensure_ascii=False bleiben Umlaute lesbar.

person = {
    "name": "Jörg",
    "stadt": "München"
}
 
json_text = json.dumps(person, indent=2, ensure_ascii=False)
 
print(json_text)

Ausgabe:

{
  "name": "Jörg",
  "stadt": "München"
}

Wenn man nicht sicher ist, ob ein Schlüssel existiert, kann man .get() verwenden.

Wenn der Schlüssel nicht existiert, entsteht kein Fehler. Stattdessen wird None zurückgegeben.

person = {
    "name": "Anna",
    "alter": 25
}
 
name = person.get("name")
if name: print(name)
else: print("Name nicht gefunden")
adresse = person.get("adresse")
if adresse: print(adresse)
else: print("Adresse nicht vorhanden")

Ausgabe:

Anna
Adresse nicht vorhanden

Man kann auch einen Standardwert angeben.

print(person.get("adresse", "Keine Adresse vorhanden"))

Ausgabe:

Keine Adresse vorhanden

In diesem Beispiel gibt es eine Firma mit mehreren Mitarbeitern.

Jeder Mitarbeiter hat wiederum eine Liste von Abteilungen.

json_text = '''
{
  "firma": "Beispiel GmbH",
  "mitarbeiter": [
    {
      "name": "Anna",
      "abteilungen": ["IT", "Support"]
    },
    {
      "name": "Ben",
      "abteilungen": ["Vertrieb", "Marketing"]
    }
  ]
}
'''
 
daten = json.loads(json_text)
 
print("Firma:", daten["firma"])
 
for mitarbeiter in daten["mitarbeiter"]:
    print("Name:", mitarbeiter["name"])
 
    for abteilung in mitarbeiter["abteilungen"]:
        print(" -", abteilung)

Ausgabe:

Firma: Beispiel GmbH
Name: Anna
 - IT
 - Support
Name: Ben
 - Vertrieb
 - Marketing
  • json.loads() wandelt JSON-Text in Python-Objekte um.
  • json.dumps() wandelt Python-Objekte in JSON-Text um.
  • JSON-Objekte {} werden zu Python-Dictionaries.
  • JSON-Listen [] werden zu Python-Listen.
  • Zugriff auf Dictionary-Werte erfolgt mit Schlüsseln:
daten["name"]
  • Zugriff auf Listenelemente erfolgt mit Indizes:
liste[0]
  • Bei verschachtelten Strukturen kombiniert man beide Zugriffsarten:
daten["schueler"][0]["noten"][1]

Das bedeutet:

  • Nimm aus daten die Schülerliste,
    • daraus den ersten Schüler,
      • daraus die Notenliste,
        • daraus die zweite Note.
  • lehrkraefte/sbt/informatik-glf2-23/json_and_python.txt
  • Last modified: 2026/05/08 07:35
  • by Karlheinz Schubert