Skip to content

Guide

Häufige YAML-Fehler

Sechs Fehler verursachen fast jeden gescheiterten Parse. Hier steht, was jeder bedeutet — und die exakte Lösung.

Von yamltojsonfree · Veröffentlicht am · Aktualisiert am

Warum YAML-Fehler so schwer zu lesen sind

YAML baut Struktur aus Einrückung. Wenn etwas schiefgeht, kann der Parser oft nicht sagen, was schiefging — nur, dass die Struktur keinen Sinn mehr ergibt. Deshalb wird eine nicht geschlossene Klammer in Zeile 12 regelmäßig als „fehlerhafte Einrückung“ in Zeile 50 gemeldet: Der Parser hat weiter Zeilen gelesen, auf ein schließendes Zeichen gewartet, das nie kam, und erst viel später aufgegeben.

Die Fehler unten sind nach ihrer tatsächlichen Ursache sortiert, nicht nach der Meldung, die ein Parser ausgibt. Wenn du sie lieber automatisch diagnostizieren lässt, füge dein Dokument in den YAML-Validator oder den YAML-zu-JSON-Converter ein — jeder dieser Fehler wird als das erkannt, was er ist, mit Zeile, verständlicher Erklärung und Lösungsvorschlag.

Die sechs Fehler im Detail

Die sechs häufigsten YAML-Syntaxfehler sind: (1) ein Tabulator zur Einrückung, (2) ein unzitierter Wert mit Doppelpunkt, (3) eine nicht geschlossene Klammer oder ein nicht geschlossenes Anführungszeichen, (4) ein doppelter Schlüssel, (5) ein Alias auf einen nicht existierenden Anchor und (6) unterschiedlich eingerückte Geschwisterschlüssel.

1. Ein Tabulator wird zur Einrückung verwendet

Warum: YAML verbietet Tabulatoren zur Einrückung vollständig, weil ihre Breite je nach Editor unterschiedlich ist.

Lösung: Ersetze jeden Tabulator durch Leerzeichen — zwei pro Ebene sind üblich. Die meisten Editoren können das mit „Einrückung in Leerzeichen umwandeln“.

2. Ein unzitierter Wert enthält einen Doppelpunkt

Warum: title: foo: bar ist mehrdeutig — der Parser kann nicht erkennen, welcher Doppelpunkt Schlüssel und Wert trennt.

Lösung: Zitiere den Wert: title: 'foo: bar'.

3. Eine Klammer oder ein Anführungszeichen wird nie geschlossen

Warum: Flow-Collections wie [80, 443] und zitierte Strings müssen in derselben logischen Zeile geschlossen werden. Die meisten Parser melden das viele Zeilen später als Einrückungsfehler.

Lösung: Füge das schließende Zeichen hinzu, oder schreibe den Wert im Block-Stil mit einem Eintrag pro Zeile.

4. Derselbe Schlüssel kommt zweimal vor

Warum: YAML-Mappings verlangen eindeutige Schlüssel, JSON-Objekte ebenso. Stillschweigend den letzten Wert zu behalten würde einen echten Bug verstecken.

Lösung: Benenne das Duplikat um oder entferne es — oder rücke es eine Ebene tiefer ein, wenn es als Unterschlüssel gemeint war.

5. Ein Alias zeigt auf einen Anchor, der nicht existiert

Warum: *name verweist auf einen mit &name definierten Anchor. Anchors müssen im Dokument vor den Aliases stehen, die sie verwenden.

Lösung: Definiere zuerst den Anchor und prüfe die Schreibweise — Anchor-Namen unterscheiden Groß- und Kleinschreibung.

6. Geschwisterschlüssel sind unterschiedlich eingerückt

Warum: Jeder Schlüssel im selben Block muss auf derselben Einrückung sitzen. Zwei Leerzeichen in einer Zeile und drei in der nächsten beenden den Block vorzeitig.

Lösung: Bring alle Geschwisterschlüssel auf dieselbe Einrückung.

Zwei Fixes, vorher und nachher

Die beiden Fehler, auf die man am häufigsten stößt — als fehlerhaftes YAML neben seiner korrigierten Form.

Unzitierter Doppelpunkt in einem Wert

Der zweite Doppelpunkt macht die Zeile mehrdeutig; den ganzen Wert zu zitieren löst das.

Fehlerhaft

title: Deploy: production
owner: platform team

Korrigiert

title: "Deploy: production"
owner: platform team

Ungleiche Einrückung von Geschwistern

„ports“ steht auf drei Leerzeichen, seine Geschwister auf zwei — der Block endet also vorzeitig.

Fehlerhaft

server:
  host: localhost
   ports:
    - 8080

Korrigiert

server:
  host: localhost
  ports:
    - 8080

Wenn das YAML gültig ist und trotzdem falsch

Ein Dokument kann perfekt parsen und trotzdem etwas anderes bedeuten, als du wolltest. Der Klassiker ist country: NO, gültiges YAML in jeder Version — aber unter YAML 1.2 der String "NO" und unter YAML 1.1 der Boolean false. Diese ganze Klasse stiller Typänderungen behandelt der Leitfaden YAML 1.1 vs. 1.2.

Quellen

Behebe dein YAML jetzt

Jeder Fehler auf dieser Seite wird von den kostenlosen Tools dieser Website mit exakter Zeile und Lösungsvorschlag erkannt. Nichts wird hochgeladen — alles läuft in deinem Browser.