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"))- Denkanstoß
In speichern
json.dump(daten, datei), in ladenreturnjson.load(datei)– jeweils in einemwithopen(...)-Block. - Welcher Befehl hilft?
Schreib die Datei mit
json.dump, nicht mitstr(daten)– dann steht dort echtes JSON.Pack das Öffnen in
tryund fangexceptFileNotFoundErrorab – dannreturn{}. - Lückencode – ergänze die ___
import json def speichern(daten, dateiname): with ___ as datei: json.dump(___) def laden(dateiname): try: with ___ as datei: return ___ except FileNotFoundError: return ___ 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🔒 Erst nach allen Hinweisen oder 2 Prüf-Versuchen
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"))