EMZETT.
Login

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])                          # Rad
const text = JSON.stringify({ id: 1, tags: ["a", "b"] });
const objekt = JSON.parse(text);

Formate im Vergleich

FormatEigenschaftenTypischer Einsatz
JSONtextbasiert, lesbar, überall verfügbarWeb-APIs, Konfiguration
XMLtextbasiert, schemafähig, ausführlichDokumente, ältere Schnittstellen
YAMLmenschenfreundlich, einrückungsbasiertKonfigurationsdateien
CSVtabellarisch, einfachTabellenexport
Protocol Buffers, MessagePack, Avrobinär, kompakt, schnellDienste, hohe Datenmengen
Java-Serialisierung, Picklesprachspezifischriskant 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