YAML
1 tools
Datenserialisierungsformate
Datenserialisierung ist der Prozess, strukturierte Daten in ein Format zu konvertieren, das gespeichert oder übertragen und später rekonstruiert werden kann.
JSON, YAML, TOML und XML sind die vier dominierenden textbasierten Serialisierungsformate in der Softwareentwicklung.
JSON und YAML im Vergleich
JSON und YAML repräsentieren das gleiche Datenmodell. YAML ist eine strikte Obermenge von JSON — jedes gültige JSON-Dokument ist auch gültiges YAML.
{
"server": {
"host": "localhost",
"port": 8080,
"debug": true
},
"database": {
"url": "postgres://localhost/mydb",
"pool": 10
}
}server: host: localhost port: 8080 debug: true database: url: postgres://localhost/mydb pool: 10
YAML verwendet Einrückung statt Klammern und lässt bei den meisten String-Werten Anführungszeichen weg. Das macht es kompakter und lesbarer für von Menschen bearbeitete Dateien.
Formatvergleich
| Format | Lesbarkeit | Kommentare | Arrays | Am besten für |
|---|---|---|---|---|
| JSON | ★★★☆☆ | Keine Kommentare | Nativ | APIs, Datenaustausch |
| YAML | ★★★★★ | Ja (#) | Nativ | Konfigdateien, IaC |
| TOML | ★★★★☆ | Ja (#) | Nativ | App-Konfiguration (Rust, Python) |
| XML | ★★☆☆☆ | Ja (<!-- -->) | Wiederholte Elemente | Dokumente, SOAP, SVG |
YAML-Fallstricke
YAML ist mächtig, hat aber bekannte Sonderfälle, die Entwickler überraschen:
Der bloße Wert 'NO' wird in YAML 1.1 als boolesches false interpretiert. Ländercodes wie NO (Norwegen), OFF, FALSE, N werden alle als false geparst. Mehrdeutige Strings immer in Anführungszeichen setzen.
YAML verwendet Einrückung zur Definition von Struktur. Ein zusätzliches Leerzeichen oder ein Tab kann die Bedeutung eines Dokuments vollständig verändern. Tabs sind in YAML verboten — nur Leerzeichen.
Werte, die wie Zahlen, Boolean oder null aussehen, werden automatisch konvertiert. Werte, die als Strings erhalten bleiben sollen, in Anführungszeichen setzen.
Die YAML-Spezifikation verbietet ausdrücklich Tabulatorzeichen für Einrückungen. Den Editor so konfigurieren, dass in YAML-Dateien Leerzeichen verwendet werden.
YAML hat zwei Indikatoren für mehrzeilige Strings: | (Literalblock, Zeilenumbrüche erhalten) und > (gefalteter Block, Zeilenumbrüche in Leerzeichen umwandeln).
YAML-Anker (&) und Aliase (*) ermöglichen die Wiederverwendung von Knoten, können aber zirkuläre Referenzen erzeugen.
Einzigartige YAML-Funktionen
Kommentare
YAML unterstützt Kommentare mit dem #-Zeichen. Das ist einer der größten praktischen Vorteile gegenüber JSON für Konfigurationsdateien.
Anker und Aliase
YAML ermöglicht es, einen Knoten einmal mit &ankername zu definieren und ihn überall mit *ankername wiederzuverwenden.
Mehrzeilige Strings
YAML unterstützt Block-Skalare mit zwei Modi: der Literalblock (|) erhält Zeilenumbrüche genau wie geschrieben; der gefaltete Block (>) wandelt Zeilenumbrüche in Leerzeichen um.
Wann eine Konvertierung nötig ist
GitHub Actions, GitLab CI und CircleCI verwenden YAML nativ. Bei der programmatischen Generierung von Pipeline-Konfigurationen ist es oft einfacher, ein JSON-Objekt zu erstellen und nach YAML zu konvertieren.
Kubernetes-Ressourcen werden in YAML definiert, aber einige Tools produzieren JSON. Die Konvertierung zwischen Formaten ermöglicht die Inspektion von API-Antworten.
REST-APIs geben JSON zurück. Bei der Übertragung dieser Daten in YAML-basierte Konfigurationssysteme überbrückt ein Konverter die Lücke.
Die Migration von einem Tool zu einem anderen bedeutet oft, sein Konfigurationsformat zu konvertieren.
JSON-Schema-Tools sind ausgereifter. Ein gängiges Muster ist, Konfigurationen in YAML zu erstellen und für die Validierung nach JSON zu konvertieren.
Interne Tools können YAML-Konfigurationen konsumieren, während externe APIs JSON erfordern.
Häufig gestellte Fragen
Ja. YAML 1.2 ist eine strikte Obermenge von JSON — jedes gültige JSON-Dokument ist auch gültiges YAML.
YAML unterstützt Kommentare, die JSON nicht hat. YAML ist auch kompakter für tief verschachtelte Strukturen.
TOML ist für Konfigurationsdateien konzipiert mit einer klaren, INI-ähnlichen Syntax mit expliziten Typen. Es ist der Standard für Rust (Cargo.toml) und Python (pyproject.toml).
Selten. JSON bewahrt die Schlüsselreihenfolge in den meisten Parsern. YAML unterstützt Anker und Tags, die kein JSON-Äquivalent haben.
JSON.stringify wandelt undefined-Werte in Arrays in null um und lässt sie in Objekten weg.
Ja. Da YAML eine Obermenge von JSON ist, kann JSON-Syntax direkt in einem YAML-Dokument eingebettet werden.