JSON vs YAML: Unterschiede und Anwendungsfälle
JSON und YAML sind die beiden am häufigsten verwendeten textuellen Serialisierungsformate zur Beschreibung strukturierter Daten: Anwendungskonfiguration, API-Payload, Infrastrukturdateien, Kubernetes-Manifeste, CI/CD-Pipelines. Beide stellen dieselben grundlegenden Strukturen dar (Objekte, Listen, Skalare), aber mit unterschiedlichen Philosophien: JSON bevorzugt Maschinenlesbarkeit und Universalität, YAML setzt auf Menschenlesbarkeit und Prägnanz. Dieser Artikel vergleicht die beiden Formate Punkt für Punkt, um Ihnen bei der Wahl zu helfen.
Was ist JSON?
JSON (JavaScript Object Notation) ist ein Serialisierungsformat, das Anfang der 2000er Jahre von Douglas Crockford eingeführt wurde und von der wörtlichen Objektsyntax von JavaScript abgeleitet ist. Standardisiert durch RFC 8259 und ECMA-404 ist es heute das zentrale Format des Webs: Nahezu alle REST-APIs, NoSQL-Datenbanken und Frontend-Konfigurationen verwenden es.
JSON basiert auf zwei Strukturen:
- Eine geordnete Sammlung von Schlüssel-Wert-Paaren (das Objekt, in geschweiften Klammern)
- Eine geordnete Liste von Werten (das Array, in eckigen Klammern)
Die skalaren Werte sind string, number, true,
false oder null. Zeichenketten müssen zwingend in doppelte
Anführungszeichen eingeschlossen werden. JSON unterstützt keine Kommentare.
Was ist YAML?
YAML (YAML Ain't Markup Language) ist ein 2001 erschienenes Format, das von Anfang an darauf ausgelegt ist, von einem Menschen lesbar zu sein. Die aktuelle Spezifikation ist YAML 1.2.2. Seine besondere Eigenschaft: Es verwendet die Einrückung, um die Hierarchie auszudrücken, ähnlich wie Python.
YAML ist seit Version 1.2 eine Obermenge von JSON: Jedes gültige JSON-Dokument ist ein gültiges
YAML-Dokument. Aber YAML fügt viel hinzu: Kommentare, Zeichenketten ohne Anführungszeichen,
mehrzeilig, Anker und Aliase, Tags für explizite Typisierung, mehrere Dokumente in einer Datei
(---).
Syntaxvergleich
Hier ist dieselbe Struktur in beiden Formaten ausgedrückt.
JSON
{
"name": "cdrn",
"version": "1.14",
"tags": ["seo", "tools", "open-source"],
"author": {
"name": "Adrien",
"email": "contact@example.com"
},
"active": true,
"stars": null
}
YAML
# Configuration projet
name: cdrn
version: "1.14"
tags:
- seo
- tools
- open-source
author:
name: Adrien
email: contact@example.com
active: true
stars: null
Bei gleichem Inhalt nimmt YAML etwa dieselbe Anzahl Zeilen ein, vermeidet aber geschweifte Klammern,
eckige Klammern, abschließende Kommas und Anführungszeichen bei den meisten Zeichenketten.
Kommentare (Zeilen mit #) sind erlaubt.
Unterstützte Typen
JSON kennt 6 Typen: object, array, string,
number, boolean, null. Kein nativer Datums-, kein
Binärtyp, keine explizite Unterscheidung zwischen Ganzzahl und Gleitkommazahl.
YAML 1.2 kennt dieselben wie JSON und fügt hinzu: ISO-8601-Zeitstempel, Binärdaten (Base64-kodiert
über den Tag !!binary), getrennte Ganzzahlen und Floats, Unendlich, NaN und
benutzerdefinierte Typen über Tags (!!str, !!int, !!float
...). YAML 1.1 akzeptierte yes/no/on/off als Booleans: eine klassische Falle bei
älteren Parsern.
Leistung und Ökosystem
JSON ist typischerweise 3- bis 10-mal schneller zu parsen als YAML, und seine Parser sind überall verfügbar (in nahezu allen Sprachlaufzeiten integriert). YAML-Bibliotheken sind umfangreicher, weil sie eine reichere Grammatik verwalten (Anchors, Tags, Multi-Doc).
Auf der Ökosystemseite: JSON dominiert HTTP-APIs, NoSQL-Datenbanken (MongoDB, CouchDB), die Dateien
package.json, composer.json, tsconfig.json. YAML hat sich für
Anwendungskonfiguration und Infrastructure-as-Code durchgesetzt: Symfony, Spring Boot, Rails,
Docker Compose, Kubernetes, GitHub Actions, GitLab CI, Ansible.
Vergleichstabelle
| Kriterium | JSON | YAML |
|---|---|---|
| Menschenlesbarkeit | Gut | Exzellent |
| Maschinenlesbarkeit | Exzellent | Ordentlich |
| Kommentare | Nein | Ja (#) |
| Signifikante Einrückung | Nein | Ja |
| Parsing-Geschwindigkeit | Schnell | Langsamer |
| Reiche Typen (Datum, Binär) | Nein | Ja |
| Anchors / Aliase | Nein | Ja |
| Typischer Anwendungsfall | API, Speicherung, Datenaustausch | Konfiguration, Infra-as-Code |
Typische Anwendungsfälle
JSON wählen, wenn
- Sie eine REST-API oder einen Webhook-Endpunkt entwerfen
- Sie Daten in einer NoSQL-Datenbank oder einem Cache speichern
- Sie Daten zwischen Frontend und Backend austauschen
- Die Parsing-Leistung kritisch ist (hoher Durchsatz, Edge)
- Sie ein universell unterstütztes Format ohne Abhängigkeit möchten
YAML wählen, wenn
- Sie eine handschriftlich bearbeitete Anwendungskonfiguration schreiben
- Sie Kommentare zur Dokumentation der Optionen benötigen
- Sie Kubernetes, Docker Compose, GitHub Actions, Ansible schreiben
- Sie Blöcke mit Ankern und Aliasen faktorisieren möchten
- Lesbarkeit Vorrang vor Verarbeitungsgeschwindigkeit hat
Empfehlung
Die einfache Regel: JSON für die Maschine, YAML für den Menschen. Wenn Ihre Datei von einem Programm erzeugt oder konsumiert wird, nehmen Sie JSON. Wenn sie von Hand geschrieben und erneut gelesen wird, nehmen Sie YAML. Viele Ökosysteme akzeptieren beide: Symfony liest YAML, JSON und XML für seine Konfigurationen, Kubernetes akzeptiert beide für seine Manifeste. Im Zweifel wählen Sie YAML für die menschliche Konfiguration und JSON für automatisierte Datenströme.
Sie können die Konvertierung von einem Format zum anderen mit unserem JSON/YAML-Konverter testen und ein Dokument schnell mit dem JSON-Formatierer formatieren.
Häufig gestellte Fragen
Ist YAML langsamer als JSON?
Ja, in der Regel kostet das Parsen eines YAML-Dokuments mehrere Male mehr CPU als das Parsen desselben JSON-Dokuments, weil die YAML-Grammatik reicher ist (Einrückung, Tags, Anchors). In der Praxis ist der Unterschied bei Konfigurationsdateien vernachlässigbar. Er wird spürbar, wenn Sie Zehntausende von Dokumenten in einer Schleife parsen.
Kann man YAML automatisch in JSON konvertieren?
Ja: Jedes YAML-Dokument kann ohne Verlust in JSON konvertiert werden, sofern man die YAML-spezifischen Typen (Zeitstempel, Anchors) vermeidet. Der umgekehrte Weg ist noch einfacher, da JSON eine Untermenge von YAML 1.2 ist. Unser Konverter arbeitet in beide Richtungen.
Akzeptiert JSON Kommentare?
Nein, der JSON-Standard verbietet sie. Es gibt Dialekte (JSON5, JSONC), die aber nicht universell unterstützt werden. Wenn Sie Kommentare benötigen, nehmen Sie YAML oder TOML.
Warum verwendet Kubernetes YAML und nicht JSON?
Die Kubernetes-Manifeste werden von Menschen geschrieben und erneut gelesen. YAML bietet Kommentare, eine weniger geräuschvolle Syntax und die Möglichkeit, über Anchors zu faktorisieren. Die Kubernetes-API akzeptiert auch JSON, aber der idiomatische Gebrauch bleibt YAML.
Ist YAML wirklich eine Obermenge von JSON?
Ja, seit YAML 1.2: Jedes gültige JSON-Dokument ist ein gültiges YAML-Dokument. Das ermöglicht es, JSON in eine YAML-Datei einzubetten, ohne es zu ändern, was praktisch für generierte oder kopierte und eingefügte Blöcke ist.