Datenaustausch vereinfachen und optimieren JSON, YAML oder XML zur Datenserialisierung nutzen

Von Thomas Joos Lesedauer: 4 min |

Anbieter zum Thema

Die Serialisierung ermöglicht es, strukturierte Daten in eine sequenzielle Form zu übertragen. Dadurch lassen sich Daten zwischen Prozessen und Netzwerken einfacher übertragen. Dieser Artikel liefert einen Überblick zu den Möglichkeiten von XML, YAML, JSON und MessagePack.

Beispiel einer XML-Datei zur Serialisierung.
Beispiel einer XML-Datei zur Serialisierung.
(Bild: Joos)

Datenstrukturen und die Serialisierung spielen in allen Programmiersprachen eine wichtige Rolle. Sollen Datenstrukturen oder Objekte über das Netzwerk oder das Internet verschickt werden, kommt normalerweise ein spezielles Format zum Einsatz, über das die Daten gespeichert werden – und das der Empfänger lesen kann.

In PHP kommen zum Beispiel Datenstrukturen als Array zum Einsatz. Andere Programmiersprachen nutzen ähnliche Funktionen, wenn auch mit alternativen Bezeichnungen und andersartiger Syntax. Die dabei ablaufenden Vorgänge werden als Serialisierung bezeichnet.

Serialisierung kommt beim Programmieren an verschiedenen Stellen zum Einsatz. Bekannte Formate in diesem Bereich sind YAML, JSON und XML, aber auch MessagePack. Bei der Serialisierung von Daten erhalten Entwickler die Möglichkeiten strukturierte Daten in sequenzieller Form zu speichern.

Dies ist vor allem dann notwendig, wenn Teile von Strukturen miteinander Daten austauschen müssen oder Prozesse Daten von anderen Prozessen erhalten sollen. Doch auch innerhalb einer Anwendung spielt die Serialisierung eine wichtige Rolle, da in den meisten Anwendungen alle Werte kaum sinnvoll als Variable gespeichert werden können, ohne den Überblick zu verlieren und den Code unnötig aufzublähen.

Im Vergleich dazu können Datenstrukturen mehrere Informationen auf einmal speichern, die sich an den verschiedenen Stellen nutzen lassen. Häufiges Einsatzgebiet der Serialisierung ist das Auslesen der Daten von Datenbanken und die anschließende Übertragung ins Netzwerk, der Cloud oder ins Internet, zum Beispiel zu Webanwendungen oder Web-Seiten.

Datenserialisierung mit XML

XML ist eines der bekanntesten Serialisierungsformate, wird aber immer mehr von JSON und YAML verdrängt. Es gibt haufenweise Markup Languages, die XML als Basis nutzen, während XML selbst immer noch zu den wichtigsten Formaten zählt. Die Syntax von XML ist komplexer als bei anderen Serialisierungsformaten.

Beim Einsatz von XML lassen sich Daten hierarchisch in Textform speichern. Allerdings ist XML auch anfällig für Angriffe durch DoS-Atacken wie Billion Laugh Attacks. Durch solche Angriffe ist es teilweise möglich, Prozesse zu starten, in dem RCE zum Einsatz kommt. XML bietet dafür aber zahlreiche Möglichkeiten zur Serialisierung.

Neben der Serialisierung von Klassen aus Feldern und Eigenschaften, ist es auch möglich komplexe XML-Streams zu erstellen. Das Serialisieren von DataSets ist mit XML genauso möglich. Dazu kommen Möglichkeiten zur Serialisierung von kompletten Feldern, um Arrays von Objekten zu erhalten, wie beim Einsatz von C#:

public class PurchaseOrder {
   public Item [] ItemsOrders;
}
public class Item {
   public string ItemID;
   public decimal ItemPrice;
}

Beispiel einer XML-Datei zur Serialisierung.
Beispiel einer XML-Datei zur Serialisierung.
(Bild: Joos)

Der Nachteil von XML ist der im Vergleich zu YAML, JSON und MessagePack hohe Overhead. Dafür handelt es sich bei XML um eine Markup Language, die natürlich mehr Möglichkeiten bietet als einfache Serialisierungsformate wie YAML, JSON oder MessagePack.

Einfach lesbares Serialisierungsformat mit YAML

YAML (YAML Ain’t Markup Language) ist ein weiteres bekanntes Serialisierungsformat, das eine überschaubare Syntax bietet. Das Tool ist vor allem durch die Zusammenarbeit mit Ruby on Rails bekannt geworden. Die Syntax ist auch von Menschen leicht lesbar und wesentlich einfacher als bei XML. Daher kommt das Format vor allem dann zum Einsatz, wenn auch Menschen die Dateien öffnen, lesen und anpassen sollen.

Grundsätzlich sind sich YAML und XML sehr ähnlich, was Syntax und Struktur der Serialisierung betrifft. Dazu kommen bei YAML aber auch Erweiterungen, mit denen sich zum Beispiel auch Python-Objekte laden, auslesen und nutzen lassen. YAML unterstützt verschiedene Datentypen für die unterschiedlichen Einsatzbereiche und kommt häufig zusammen mit JavaScript, Python, Ruby oder Java zum Einsatz. YAML kann in einer einfachen Syntax folgendermaßen aussehen:

---
MALE: TRUE
GPA: 3.61
ISSUES: NULL
NAME: “Thomas”
AGE: 36

Generell beginnen Dateien mit der Zeichenfolge „---“. Danach erfolgt die Zuordnung der Daten, wie im oberen Beispiel zu sehen. In diesem Beispiel sind verschiedene Werte enthalten. Boolesche Werte lassen sich in YAML mit Gleitkomma-Werten genauso mischen wie mit Zeichenfolgen und Nulldatentypen. Listen sind ein weiteres Beispiel, auch in verschachtelter Form. YAML nutzt weder Klammern noch Anführungszeichen und auch keine Tags. Dafür kommen Einrückungen zum Einsatz.

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Softwareentwicklung und DevOps

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung

JavaScript Object Notation – JSON

Neben XML und YAML gehört JSON zu den bekanntesten Serialisierungsformaten für Daten. Mit JSON lassen sich Daten auf Basis von JavaScript austauschen, da alle JSON-Dateien gleichzeitig ein JavaScript darstellen. Es gibt daher keine Trennung zwischen Dokumenten und Code, sondern in einer Datei sind alle notwendigen Funktionen enthalten, um die Daten zu serialisieren und beim Empfänger zu lesen.

JSON kommt häufig bei der asynchronen Datenübertragung zwischen Servern und Webseiten zum Einsatz. Im Vergleich zu XML und YAML hat JSON einen sehr viel geringeren Overhead. Dazu kommt die Unterstützung durch eine Vielzahl von Programmiersprachen.

Dafür kennt JSON nicht so viele Datentypen wie YAML, allerdings reichen Typen wie Objekte, Arrays, Strings, Integer, Boolean und Null in den meisten Fällen aus. Ähnlich wie XML, kann auch JSON für Angriffe auf Netzwerk missbraucht werden. Dabei kann ein JSON-Dokument unerwünschte Funktionen aufrufen, was darin resultiert, dass Angreifer darüber schädlichen Code einschleusen können.

MessagePack: Binäres Datenformat zur Serialisierung nutzen

MessagePack funktioniert ähnlich wie JSON. Das binäre Serialisierungsformat hat einen geringeren Overhead als JSON und ist im Allgemeinen schneller bei der Übertragung. Durch seine binäre Ausrichtung ist MessagePack sehr kompakt. wenn es um die Serialisierung von Daten geht. Vor allem bei binären Dateien ist MessagePack das geeignete Serialisierungsformat und anderen Formaten wie JSON deutlich überlegen.

Fazit

Generell ist XML, genauso wie YAML das passende Serialisierungsformat, wenn zahlreiche Datentypen oder wilde Strukturen vorhanden sind, zwischen denen zuverlässig Daten ausgetauscht werden sollen. Reichen aber einfachere Formate aus, weil die Funktionen von XML oder YAML nicht notwendig sind, können JSON und MessagePack besser geeignet sein. Um binäre Dateitypen zu serialisieren ist MessagePack wiederum JSON überlegen, sodass die Auswahl an dieser Stelle leichtfällt.

(ID:48987212)