Wo das Weglassen der Anführungszeichen den Wert verändert
YAML bestimmt den Typ eines Werts ohne Anführungszeichen selbst, und genau dort passieren die Unfälle.
version: 1.10 wird als Zahl gelesen und ergibt 1.1: Die abschließende Null fällt weg, die Version bedeutet etwas anderes. zip: 01234 wird ebenso zur Zahl 1234 und verliert die führende Null. Postleitzahlen, Personalnummern und Telefonnummern gehören deshalb als "01234" in Anführungszeichen.
Werte wie 12:30, no, yes und on bleiben in diesem Werkzeug Text. Parser nach den alten Regeln, darunter PyYAML und Ruby, lesen no dagegen als falsch — so wird aus dem Ländercode NO bekanntlich false. Läuft eine Konfiguration durch mehrere Werkzeuge, setzt man auch diese Wörter besser in Anführungszeichen.
Regeln für die Einrückung
Nur mit Leerzeichen einrücken. Ein Tabulator ist ein Syntaxfehler. Fügt der Editor Tabulatoren ein, für YAML-Dateien auf Leerzeichen umstellen.
Einträge derselben Ebene müssen exakt bündig stehen. Eine Spalte daneben, und das Einlesen scheitert genau dort. Dieses Werkzeug nennt Zeile und Spalte, an der es abgebrochen hat.
Anker und Merge-Schlüssel
&name beschriftet einen Block, *name fügt ihn wieder ein. Mit <<: wird dieser Block in eine andere Zuordnung gegossen.
defaults: &d
retry: 2
image: node
job:
<<: *d
script: test
Dieses Werkzeug löst Merge-Schlüssel auf, das JSON enthält also retry und image innerhalb von job. Ohne Auflösung bliebe ein wörtlicher Schlüssel "<<" stehen, mit dem weiter hinten niemand etwas anfangen kann. In GitLab-CI- und Docker-Compose-Dateien begegnet einem diese Schreibweise ständig.
Was auf dem Weg zu JSON verloren geht
Kommentare verschwinden. JSON kennt keine Kommentarsyntax; wer eine Konfiguration umwandelt und über das Original speichert, wirft sämtliche Notizen weg, die jemand dort hinterlassen hat. Das Original aufheben.
Mehrere Dokumente passen ebenfalls nicht hinein. Enthält eine Datei mehrere durch --- getrennte Dokumente, meldet dieses Werkzeug einen Fehler, statt stillschweigend das erste auszugeben und den Rest unbemerkt verschwinden zu lassen. Ein Kubernetes-Manifest mit mehreren Dokumenten also aufteilen und einzeln umwandeln.
Datumsangaben werden zu Text. YAML kennt das Datum als Typ, JSON hat keine Entsprechung.
In die andere Richtung
Von JSON nach YAML fallen die meisten Anführungszeichen weg und das Ergebnis liest sich deutlich besser. Bei Zeichenketten mit führender Null und bei solchen, die wie true aussehen, bleiben sie stehen: Sie dort zu entfernen würde die Bedeutung ändern. Dass sie bleiben, ist richtig so und kein Formatierungsfehler.