Serialisierung
Kurz: Serialisierung wandelt Objekte oder Datenstrukturen in ein Format um, das sich speichern oder übertragen lässt (JSON, XML, Binär); Deserialisierung stellt daraus wieder Objekte her.
Genauer: Sie ist nötig, um Daten in Dateien oder Datenbanken abzulegen, über Netzwerke zu senden (REST-Schnittstellen, Nachrichtenwarteschlangen) oder zwischen Programmen verschiedener Sprachen auszutauschen. Das Format sollte einen stabilen Aufbau, Versionierung und Fehlerprüfung bieten.
Im Detail
import json
person = {"name": "Mia", "alter": 17, "hobbys": ["Lesen", "Rad"]}
text = json.dumps(person, ensure_ascii=False) # serialisieren
print(text) # {"name": "Mia", "alter": 17, ...}
zurueck = json.loads(text) # deserialisieren
print(zurueck["hobbys"][1]) # Radconst text = JSON.stringify({ id: 1, tags: ["a", "b"] });
const objekt = JSON.parse(text);Formate im Vergleich
| Format | Eigenschaften | Typischer Einsatz |
|---|---|---|
| JSON | textbasiert, lesbar, überall verfügbar | Web-APIs, Konfiguration |
| XML | textbasiert, schemafähig, ausführlich | Dokumente, ältere Schnittstellen |
| YAML | menschenfreundlich, einrückungsbasiert | Konfigurationsdateien |
| CSV | tabellarisch, einfach | Tabellenexport |
| Protocol Buffers, MessagePack, Avro | binär, kompakt, schnell | Dienste, hohe Datenmengen |
| Java-Serialisierung, Pickle | sprachspezifisch | riskant bei fremden Daten |
Sicherheit
Fremde Daten nie mit Mechanismen deserialisieren, die beliebigen Code ausführen können (Python pickle, Java ObjectInputStream): Das ist eine klassische Sicherheitslücke. JSON mit Schema-Prüfung ist die sichere Wahl. Beim Umgang mit Datum, Zahlen (Genauigkeit) und Zeichensatz auf Konsistenz achten. Zugrunde liegt oft Reflection.
Siehe auch: Reflection, JSON, XML, Dateien schreiben