Zum Spiel · 12.09.2026
Zum Spiel: JSON — die Welt als Daten
json.loads und json.dumps: Wie Falkenmoor seine 228 Räume aus world.json liest und deinen Spielstand rettet.
Dein Held überlebt den Logout — weil sein Spielstand als Text gespeichert wird. Das Format dafür heißt JSON (JavaScript Object Notation): Dictionaries und Listen als lesbarer Text. Falkenmoor hält seine komplette Welt — 228 Räume, 103 NPCs, alle Items — in einer einzigen Datei world.json. Hier lernst du, beide Seiten zu benutzen.
Kurze Wiederholung: dicts und Listen
held = {"name": "Mirabel", "hp": 30, "inventar": ["Schwert"]}
print(held["hp"], held["inventar"][0])dumps: Python wird Text · loads: Text wird Python
import json
stand = {"held": "Mirabel", "hp": 17, "raum": "kneipe"}
text = json.dumps(stand)
print(text, type(text))
zurueck = json.loads(text)
print(zurueck["hp"], type(zurueck))Merkschema: Der Endbuchstabe zählt — dumps macht einen String, loads liest einen String. Für Dateien heißen die Brüder json.dump() und json.load().
Verschachtelt geht auch
import json
helden = {
"Mirabel": {"hp": 30, "inventar": ["Schwert"]},
"Thorak": {"hp": 40, "inventar": []},
}
text = json.dumps(helden, indent=2)
print(text)
print(json.loads(text)["Thorak"]["hp"]) # 40Und als Datei? (lokal)
import json
welt = {"hof": {"exits": {"norden": "keller"}}}
with open("welt.json", "w", encoding="utf-8") as fh:
json.dump(welt, fh, ensure_ascii=False, indent=2)
with open("welt.json", encoding="utf-8") as fh:
gleiche_welt = json.load(fh)
print(gleiche_welt["hof"]["exits"]["norden"])Genau das macht Falkenmoor beim Start: world.json öffnen, json.load() — und aus dem Dict werden 228 Räume mit Ausgängen, NPCs und Items. Der Weltgenerator schreibt die Datei, die Engine liest sie.
So übst du das
- Roundtrip im Playground: dict → dumps → loads → dict, mit
type()jede Station prüfen. - Eigene Mini-Welt: drei Räume als Dict mit Ausgängen — und ein kleines Programm, das einen Raum und seine Ausgänge druckt (Übung 2 unten).
- Lokal: eine echte welt.json anlegen und mit json.load lesen (Datei-Übung).
- Speicherstand: dein Held als JSON-Text, Version mit indent=2 schön formatiert.
Übungen
Übung 1 — Der Roundtrip
Verwandle {"held": "Mirabel", "hp": 17} in JSON-Text und zurück. Prüfe mit type(), was du jeweils vor dir hast.
Musterlösung zeigen
import json
stand = {"held": "Mirabel", "hp": 17}
text = json.dumps(stand)
zurueck = json.loads(text)
print(type(text), type(zurueck))
print(zurueck["held"])Übung 2 — Drei Räume als Daten
Baue ein Dict mit drei Räumen (Beschreibung + Ausgänge), wähle mit einer Variable raum = "hof" den aktuellen Raum aus und drucke Beschreibung und Ausgänge.
Musterlösung zeigen
welt = {
"hof": {"text": "Ein Hof.", "exits": {"norden": "keller"}},
"keller": {"text": "Ein Keller.", "exits": {"sueden": "hof"}},
"kammer": {"text": "Eine Kammer.", "exits": {"sueden": "hof"}},
}
raum = "hof"
print(welt[raum]["text"])
print("Ausgänge:", welt[raum]["exits"])Übung 3 — Echte Datei (lokal)
Schreibe eine Datei welt.json mit drei Räumen und lies sie mit json.load() ein. Gib die Anzahl der Räume aus. Lokal: python3 lese_welt.py
Musterlösung zeigen
# lese_welt.py
import json
with open("welt.json", encoding="utf-8") as fh:
welt = json.load(fh)
print(len(welt), "Räume geladen")Übung 4 — Tief gestaffelt
Lies aus dem verschachtelten helden-Dict die HP von Thorak — über eine json.loads-Runde hinweg.
Musterlösung zeigen
import json
text = '{"Mirabel": {"hp": 30}, "Thorak": {"hp": 40}}'
helden = json.loads(text)
print(helden["Thorak"]["hp"])Quiz — Teste dich
Erst überlegen, dann aufklappen — so trainiert es am meisten!
- Was liefert
json.loads('{"hp": 3}')? - Was liefert
json.dumps({"a": 1})? - Welcher Typ lässt sich nicht direkt als JSON speichern — dict, Liste oder deine eigene Klasse?
- Wofür sind
json.load()undjson.dump()da? - Woher kennt Falkenmoor seine 228 Räume?
Quiz-Lösungen anzeigen
- Ein Python-
dictmit dem Schlüsselhpund dem Wert 3. - Einen JSON-
String:{"a": 1}. - Eigene Klassen — JSON kennt nur Basis-Typen (dict, list, str, Zahl, bool, None).
- Für Dateien — das s in dumps/loads steht für String.
- Aus world.json im Spielordner — beim Start einmal eingelesen.
Mehr aus der Kategorie „Zum Spiel“
- Zum Spiel: Fehler lesen 12.09.2026
- Zum Spiel: Text und Befehle 12.09.2026
- Zum Spiel: Mehrere Dateien 12.09.2026
- Drei Räume — dein erstes Textabenteuer 12.09.2026