Zum Inhalt springen
BetaEN
Lektion 17 von 35Python

Python · Lektion 17 · 30 Minuten

JSON – Daten speichern wie die Profis

Das lernst du

  • Verstehen, was JSON ist und wo es überall benutzt wird
  • Dictionaries und Listen mit json speichern und laden
  • Gespeicherte Daten weiterverarbeiten

Was ist JSON?

JSON (gesprochen „Jason“) ist ein Textformat für Daten. Es sieht fast genauso aus wie Python-Dictionaries und -Listen – und wird überall benutzt: Apps speichern damit Einstellungen, Webseiten schicken damit Daten hin und her, und auch Codelix speichert deinen Fortschritt im Browser als JSON.

import json

spieler = {"name": "Mia", "level": 7, "items": ["Schwert", "Schild"], "aktiv": True}
text = json.dumps(spieler)
print(text)
print(type(text))

json.dumps macht aus Python-Daten einen Text. Achte auf die Unterschiede: JSON schreibt true statt True und immer doppelte Anführungszeichen.

Und wieder zurück

import json

text = '{"name": "Ben", "punkte": [3, 5, 8]}'
daten = json.loads(text)
print(daten["name"], sum(daten["punkte"]))

json.loads macht aus dem Text wieder echte Python-Daten.

Mit Dateien: dump und load

Ohne das s am Ende arbeiten die Funktionen direkt mit Dateien:

import json

einstellungen = {"lautstaerke": 80, "sprache": "de"}
with open("einstellungen.json", "w") as datei:
    json.dump(einstellungen, datei)

with open("einstellungen.json") as datei:
    geladen = json.load(datei)
print(geladen)

Merke: dumps/loads = mit Strings (Texten), dump/load = mit Dateien.

Kurz-Check

Was gibt dieses Programm aus?

import json
print(json.dumps({"ok": True, "n": None}))

Deine Aufgabe

Jetzt bist du dran

Schreib zwei Funktionen. speichern(daten, dateiname) schreibt ein Dictionary als JSON in eine Datei. laden(dateiname) liest die Datei wieder ein und gibt die Daten zurück. Gibt es die Datei noch nicht, soll laden ein leeres Dictionary zurückgeben (Tipp: FileNotFoundError abfangen).

import json


def speichern(daten, dateiname):
    pass


def laden(dateiname):
    pass


highscores = {"Ana": 120, "Ben": 95}
speichern(highscores, "highscores.json")
print(laden("highscores.json"))

Ohne Hinweise gelöst gibt es einen ⭐ auf deiner Fortschrittsseite.

Lösung anzeigen

Versuch es erst selbst – aus Fehlern lernt man am meisten. Hier ist eine mögliche Lösung:

import json


def speichern(daten, dateiname):
    with open(dateiname, "w") as datei:
        json.dump(daten, datei)


def laden(dateiname):
    try:
        with open(dateiname) as datei:
            return json.load(datei)
    except FileNotFoundError:
        return {}


highscores = {"Ana": 120, "Ben": 95}
speichern(highscores, "highscores.json")
print(laden("highscores.json"))