YAML ↔ JSON: Unterschiede und Konvertierungsregeln
Bei der Konfiguration von Infrastrukturen, dem Datenaustausch zwischen Systemen und dem Speichern von Anwendungsdaten dominieren zwei Formate: JSON (JavaScript Object Notation) und YAML (YAML Ain’t Markup Language). Während JSON primär für die schnelle und maschinenlesbare Datenübertragung über APIs konzipiert wurde, steht bei YAML die Lesbarkeit durch den Menschen im Vordergrund. Entwickler und Systemadministratoren stehen regelmässig vor der Aufgabe, Konfigurationen zwischen diesen beiden Formaten zu konvertieren und die jeweiligen Stärken abzuwägen.
Die Kernunterschiede im direkten Vergleich
Obwohl beide Formate zur Darstellung von Objekten, Arrays, Strings und Zahlen dienen, unterscheiden sie sich in ihrer Philosophie und ihren syntaktischen Details fundamental. Wer eine fehlerhafte JSON-Struktur zuerst bereinigen möchte, findet im Leitfaden zum JSON formatieren die häufigsten Syntaxfehler und ihre Behebung.
| Eigenschaft | JSON (JavaScript Object Notation) | YAML (YAML Ain’t Markup Language) |
|---|---|---|
| Primärer Fokus | Maschinenlesbarkeit, Schnelligkeit und Einfachheit. | Menschenlesbarkeit und einfache Bearbeitung von Hand. |
| Strukturierung | Geschweifte {} und eckige Klammern []. | Einrückung mittels Leerzeichen (Indentation-sensitive). |
| Kommentare | Nicht unterstützt (offiziell verboten). | Unterstützt mittels #. |
| Datentypen | Strings, Numbers, Booleans, Null, Arrays, Objects. | Strings, Numbers, Booleans, Null, Dates, Arrays, Maps, binäre Daten. |
| Sicherheit | Sehr hoch (reines Datenformat, kaum Angriffsvektoren). | Mittel (komplexe Features wie Referenzen können missbraucht werden). |
| Parser-Performance | Extrem schnell (nativ in fast allen Browsern/CPUs). | Deutlich langsamer (kompliziertere Grammatik). |
| Hauptsächlicher Einsatz | REST-APIs, AJAX, NoSQL-Datenbanken, Web-Apps. | CI/CD-Konfigurationen, Docker Compose, Kubernetes Manifeste. |
Syntaxvergleich an einem praktischen Beispiel
Ein direkter Vergleich verdeutlicht die Kompaktheit von YAML gegenüber JSON bei identischer Datenstruktur:
JSON-Darstellung (Sehr explizit)
{
"application": "Allerate Content Hub",
"version": 1.2,
"active": true,
"supported_formats": [
"JSON",
"YAML",
"Markdown"
],
"author": {
"name": "Rolf Scherer",
"role": "Lead Architect"
}
}
YAML-Darstellung (Minimalistisch und sauber)
application: Allerate Content Hub
version: 1.2
active: true
supported_formats:
- JSON
- YAML
- Markdown
author:
name: Rolf Scherer
role: Lead Architect
Fortgeschrittene YAML-Funktionen
YAML bietet mächtige Funktionen, die in JSON komplett fehlen und die Strukturierung grosser Konfigurationsdateien erleichtern:
1. Mehrzeilige Strings (Literal and Folded Blocks)
In JSON müssen Zeilenumbrüche mühsam als \n in eine einzelne Textzeile geschrieben werden. YAML bietet dafür zwei Operatoren:
- Literal Block Indicator (
|): Behält alle Zeilenumbrüche exakt so bei, wie sie im Text stehen. - Folded Block Indicator (
>): Ersetzt einfache Zeilenumbrüche durch Leerzeichen, sodass der Text im Editor übersichtlich umbrochen werden kann, im Endergebnis aber ein einziger Absatz bleibt.
2. Anker (&) und Aliase (*)
Mit Ankern lassen sich Datenblöcke markieren und an anderer Stelle referenzieren. Dies verhindert redundante Konfigurationen (DRY-Prinzip):
default_settings: &defaults
timeout: 30
retry: true
api_service:
<<: *defaults
endpoint: "/v1/data"
Das Zeichen << (Merge Key) fügt alle Parameter des Ankers defaults in das Objekt api_service ein.
Typische Fehler bei der Konvertierung
Beim Übersetzen von JSON zu YAML oder umgekehrt lauern typische Stolpersteine:
- Verwendung von Tabulatoren (Tabs) in YAML: YAML verbietet die Verwendung von Tabulatoren (
\t) zur Einrückung. Es dürfen ausschliesslich Leerzeichen verwendet werden. Ein einziger Tabulator führt zu einem Absturz des Parsers. - Fehlende Anführungszeichen bei Strings: In YAML sind Anführungszeichen bei einfachen Strings optional. Besteht ein String jedoch aus Sonderzeichen (wie Doppelpunkten, eckigen Klammern oder Booleans wie
yes/no), kann der Parser den Datentyp falsch interpretieren.active: yeswird in YAML oft als Booleantrueinterpretiert, wohingegen JSON zwingendtrueverlangt. Wer solche Mehrdeutigkeiten programmatisch abfangen will, kann Werte vorab mit einem regulären Ausdruck validieren. - Verschiebung von Datentypen: JSON besitzt keinen Datentyp für Datumsangaben – diese werden als ISO-String gespeichert. YAML erkennt Datumsangaben (
updated: 2026-06-21) hingegen nativ als Datetime-Objekt. Beim Zurückkonvertieren in JSON muss darauf geachtet werden, diese Datentypen wieder in Strings zu transformieren.
Code-Beispiele zur Konvertierung in Programmiersprachen
JavaScript / Node.js
Für Node.js wird die Bibliothek yaml verwendet, um Dokumente sicher zu parsen und zu konvertieren:
const fs = require('fs');
const YAML = require('yaml');
// YAML einlesen und in JSON umwandeln
const yamlFile = fs.readFileSync('config.yaml', 'utf8');
const parsedData = YAML.parse(yamlFile);
const jsonOutput = JSON.stringify(parsedData, null, 2);
fs.writeFileSync('config.json', jsonOutput, 'utf8');
Python
Python besitzt mit json und pyyaml (zu installieren via pip install pyyaml) eine hervorragende Unterstützung:
import json
import yaml
# JSON in YAML konvertieren
with open('data.json', 'r') as json_file:
data = json.load(json_file)
with open('data.yaml', 'w') as yaml_file:
yaml.dump(data, yaml_file, default_flow_style=False)
Sicherheitsaspekte: Die Risiken von YAML
Während JSON als reines Datenformat extrem sicher ist, bringt die Komplexität von YAML gewisse Risiken mit sich:
- Billion Laughs / Entity Expansion Attack: Ähnlich wie bei XML können in YAML rekursive Referenzen definiert werden. Ein winziges YAML-Dokument kann dadurch beim Parsen Gigabytes an Arbeitsspeicher verbrauchen und den Server lahmlegen (Denial of Service).
- Arbitrary Code Execution (Beliebiger Codeausführung): Einige ältere Python- oder Ruby-Parser (wie
yaml.load()stattyaml.safe_load()) erlauben es, Klasseninstanzen direkt im YAML-Dokument zu deklarieren. Angreifer können dies ausnutzen, um Schadcode auf dem Server ausführen zu lassen. Sicherheits-Faustregel: Nutzen Sie immer den sicheren Safe-Modus des Parsers.
[!TIP] Müssen Sie eine Konfigurationsdatei (z. B. Kubernetes-Manifest oder Docker Compose) von YAML in JSON übersetzen oder umgekehrt? Nutzen Sie den kostenlosen YAML ↔ JSON Converter auf balou.tools für eine sofortige Konvertierung. Eine Übersicht über weitere praktische Werkzeuge finden Sie in den Developer Tools.
Häufig gestellte Fragen (FAQ)
Ist jedes JSON-Dokument auch gültiges YAML?
Ja. Seit dem Standard YAML 1.2 ist JSON eine offizielle Teilmenge von YAML. Jedes syntaktisch korrekte JSON kann von einem modernen YAML-Parser eingelesen werden.
Warum wird YAML oft für Docker und Kubernetes verwendet?
YAML bietet durch den Verzicht auf geschweifte Klammern und Anführungszeichen eine deutlich bessere Lesbarkeit bei komplexen, verschachtelten Konfigurationen. Zudem unterstützt es Kommentare.