Python lernen · Schritt 13 von 14
Im MUD: world.json ist die halbe Spielwelt

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"])   # 40

Und 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!

  1. Was liefert json.loads('{"hp": 3}')?
  2. Was liefert json.dumps({"a": 1})?
  3. Welcher Typ lässt sich nicht direkt als JSON speichern — dict, Liste oder deine eigene Klasse?
  4. Wofür sind json.load() und json.dump() da?
  5. Woher kennt Falkenmoor seine 228 Räume?
Quiz-Lösungen anzeigen
  1. Ein Python-dict mit dem Schlüssel hp und dem Wert 3.
  2. Einen JSON-String: {"a": 1}.
  3. Eigene Klassen — JSON kennt nur Basis-Typen (dict, list, str, Zahl, bool, None).
  4. Für Dateien — das s in dumps/loads steht für String.
  5. Aus world.json im Spielordner — beim Start einmal eingelesen.

Mehr aus der Kategorie „Zum Spiel“

← Zurück zum Lehrpfad