YAML-Formatierungstool
Was ist YAML?
Der YAML-Formatter macht YAML-Dateien durch konsistente Einrückung, Zeilenumbrüche und sichtbare Struktur besser lesbar. YAML wird häufig für CI-Konfigurationen, Kubernetes-Manifeste, Docker Compose, Static-Site-Generatoren, Lokalisierung, OpenAPI-Dateien und Anwendungseinstellungen genutzt. Anders als JSON ist YAML stark von Einrückung, Listenmarkierungen, Doppelpunkten, Quotes und mehrzeiligen Strings geprägt; kleine Formatfehler können eine komplett andere Struktur erzeugen. Das Werkzeug hilft beim Lesen, Bereinigen und Finden offensichtlicher Syntaxprobleme, ersetzt aber keine Schema- oder Tool-spezifische Validierung. Besonders bei Kubernetes, GitHub Actions oder Ansible sollte das Ergebnis im Zielsystem geprüft werden. Besonders bei produktiven Daten oder Codebasen sollte das Ergebnis anschließend mit Parser, Tests oder Projektregeln geprüft werden.
Verwendung
Verwendung
- Fügen Sie YAML-Daten in das linke Eingabefeld ein oder geben Sie sie ein
- Wählen Sie die Einrückungsgröße passend zu Ihrem Projektstil
- Klicken Sie auf 'Formatieren' zur Verschönerung, 'Komprimieren' zur Größenreduktion oder 'Validieren' zur Syntaxprüfung
- Die Ergebnisse erscheinen rechts
- Klicken Sie auf 'Kopieren', um in die Zwischenablage zu kopieren
Optionen
Tastaturkürzel
- Strg + EnterFormatieren
- Strg + Umschalt + CErgebnis kopieren
YAML-Tipps
- YAML ist einrückungsempfindlich. Überprüfen Sie verschachtelte Listen und Maps nach der Formatierung, bevor Sie das Ergebnis in CI-, Kubernetes- oder Deployment-Dateien verwenden.
- Validieren Sie nach Möglichkeit gegen das Schema des Zieltools. Syntaktisch gültiges YAML kann dennoch für GitHub Actions, Docker Compose oder OpenAPI ungültig sein.
Anwendungsfälle
Technisches Prinzip
Die YAML-Formatierung ist in der YAML-1.2.2-Spezifikation (überarbeitet Oktober 2021) verankert, die JSON formal als strikte Teilmenge von YAML definiert – jedes gültige JSON-Dokument ist als YAML parsebar. Das Parsing erfolgt in drei Schichten: Eine Darstellungsschicht scannt Unicode-Codepunkte und löst Zeichenersatzsequenzen auf; eine Serialisierungsschicht konstruiert einen Knotengraphen aus Skalaren, Sequenzen und Mappings; eine native Schicht wendet das YAML Core Schema an, um Skalare in die aufgelösten Typen `!!str`, `!!int`, `!!float`, `!!bool`, `!!null`, `!!seq`, `!!map` zu koerzieren. Gängige Laufzeitbibliotheken sind js-yaml und das neuere `yaml`-Paket auf Node, PyYAML und ruamel.yaml auf Python sowie SnakeYAML auf der JVM. Browserseitige Formatter parsen typischerweise über js-yaml's `load`/`dump` in ein einfaches JS-Objekt und round-trippen. Die Einrückung ist das tragende Primitiv: Nur ASCII-Leerzeichen (U+0020) sind erlaubt – die Spezifikation verbietet in §6.1 ausdrücklich Tabulatorzeichen (U+0009) für Einrückungen, weshalb das Einfügen aus einem Code-Editor, der automatisch konvertiert, die häufigste Parsing-Fehlerursache ist. Der Blockstil bestimmt die Verschachtelung rein aus der Spaltenposition, sodass Kindknoten mindestens ein Leerzeichen mehr eingerückt sein müssen als ihr Elternelement (zwei per Konvention). Der Flow-Stil entlehnt JSON-Syntax – `[1, 2, 3]` und `{a: 1, b: 2}` – und kann für Einzeiler innerhalb des Blockstils verschachtelt werden. Blockskalare verwenden indikatorgesteuertes Folding: `|` (literal) behält Zeilenumbrüche exakt bei, `>` (folded) kollabiert einzelne Zeilenumbrüche zu Leerzeichen und behält Leerzeilen als Absatztrenner, und die Chomping-Indikatoren `-` (nachfolgende Zeilenumbrüche entfernen) und `+` (alle nachfolgenden Zeilenumbrüche beibehalten) werden nach dem Indikator angehängt (`|-`, `>+`). Die Anführungszeichenregeln unterscheiden sich: Einfach-quotede Skalare behandeln `\\` wörtlich und verwenden `''` für ein eingebettetes Anführungszeichen; doppelt-quotede Skalare respektieren C-artige Escape-Sequenzen (`\\n`, `\\t`, `\\uXXXX`). Formatter normalisieren typischerweise auf einen Blockstil und geben Anker und Aliase erneut aus. Ein Anker `&name` markiert einen Knoten; ein Alias `*name` referenziert ihn; der Merge-Key `<<: *name` (ein YAML-1.1-Überbleibsel, der von den meisten Parsers noch unterstützt wird) zieht Schlüssel aus einem anderen Mapping in das aktuelle. Mehr-Dokument-Ströme werden durch `---`-Startmarker und optionale `...`-Endmarker getrennt – das Muster, das Kubernetes verwendet, um mehrere Ressourcen in einem Manifest auszuliefern. Zwei bekannte Fußangeln sollten sicher erneut ausgegeben werden: Das Norwegen-Problem – der nicht-quotede Skalar `no` wird unter dem YAML-1.1-Schema als `false` interpretiert (und der Ländercode wird zu einem Boolean) – und CVE-2017-18342, bei dem PyYAMLs `yaml.load` beliebige Python-Objekte deserialisierte, behoben durch die Umstellung auf `safe_load`. Beides sind Gründe, weshalb ein Formatter die Skalaraufösung sorgfältig behandeln und niemals getaggte Konstruktoren ausführen sollte. Das Parsing ist O(n) über die Eingabelänge; Kommentare werden von den meisten AST-basierten Bibliotheken verworfen, da sie nicht zum YAML-Informationsmodell gehören.
- Spezifikation: YAML 1.2.2 (Okt 2021). JSON ist eine strikte Teilmenge von YAML 1.2, daher parst jedes gültige JSON-Dokument als YAML; gängige Bibliotheken sind js-yaml, das `yaml`-Paket, PyYAML, ruamel.yaml, SnakeYAML.
- Die Einrückung muss ASCII-Leerzeichen (U+0020) sein; Tabulatorzeichen (U+0009) sind für Einrückungen durch §6.1 verboten – die häufigste Ursache für `mapping values are not allowed here`-Fehler.
- Block- vs. Flow-Stil: Block verwendet Spaltenpositions-Verschachtelung (2 oder 4 Leerzeichen per Konvention); Flow verwendet JSON-ähnliche `[1, 2, 3]` und `{a: 1}`. Beide können verschachtelt werden.
- Blockskalare: `|` literal behält Zeilenumbrüche bei, `>` folded kollabiert einzelne Zeilenumbrüche zu Leerzeichen; Chomping-Indikatoren `-` (entfernen) und `+` (beibehalten) werden am Indikator angehängt, z. B. `|-`, `>+`.
- Anker `&name` markieren Knoten, Aliase `*name` referenzieren sie, und der Merge-Key `<<: *name` zieht Schlüssel aus einem anderen Mapping (YAML-1.1-Überbleibsel, von den meisten Parsersn unterstützt).
- Mehr-Dokument-Ströme werden durch `---` (Start) und optionale `...` (Ende) Marker getrennt – das Muster, das Kubernetes für die Auslieferung mehrerer Ressourcen in einem Manifest verwendet.
- Fußangeln: Das Norwegen-Problem (nicht-quotede `no`/`yes`/`on`/`off` werden unter dem YAML-1.1-Schema als Booleans geparst; das YAML 1.2 Core Schema behebt dies größtenteils) und CVE-2017-18342 (PyYAML `yaml.load` führt beliebigen Code aus; verwenden Sie `safe_load`).
Beispiele
Inkonsistente Einrückung in einer Konfigurationsdatei korrigieren
Eingabe (fehlerhaft):
server:
port: 8080
host: localhost
debug: true
Formatiert (2 Leerzeichen):
server:
port: 8080
host: localhost
debug: trueVerschachtelte Liste von Services in docker-compose.yml
version: '3.8'
services:
web:
image: nginx:1.25
ports:
- "80:80"
- "443:443"
depends_on:
- api
api:
image: node:20
environment:
NODE_ENV: productionKubernetes-Deployment-Manifest
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
labels:
app: web
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
spec:
containers:
- name: web
image: nginx:1.25YAML in JSON für eine jq-Pipeline konvertieren
YAML-Eingabe:
user:
id: 42
name: alice
roles:
- admin
- editor
JSON-Ausgabe:
{
"user": {
"id": 42,
"name": "alice",
"roles": ["admin", "editor"]
}
}Fehlendes Leerzeichen nach Doppelpunkt erkennen
Eingabe:
name:alice
age: 30
Fehler in Zeile 1: fehlendes Leerzeichen nach Doppelpunkt
Korrigiert:
name: alice
age: 30FAQ
Was umfasst die YAML-Formatierung?
Normalisierung der Einrückung (typisch 2 Leerzeichen), einheitlicher Quote-Stil, Ausrichtung der Listenmarker und Umbruch langer Inline-Collections in den Block-Stil. Die meisten YAMLs in freier Wildbahn sind handgepflegt und sammeln inkonsistenten Stil an; der Formatter glättet das.
Konvertiert es Flow-Style in Block-Style?
Viele Builds lassen dich zwischen Flow-Style (JSON-ähnlich {key: value, key2: value2}) und Block-Style (mehrzeilig eingerückt) wählen. Block ist beim Editieren von Hand besser lesbar; Flow ist kompakter. Beim Round-Trip bleiben die Daten erhalten, aber das Erscheinungsbild ändert sich.
Warum verändert es meine Anführungszeichen?
YAML erlaubt Strings ohne Quotes, mit einfachen oder mit doppelten Quotes - mit subtilen Unterschieden. Yes/no, true/false, on/off werden als Booleans interpretiert, sofern sie nicht in Quotes stehen; Zahlen ohne Quotes sind Zahlen, mit Quotes sind sie Strings. Der Formatter setzt Quotes mitunter, um Werte eindeutig zu machen, die sonst falsch interpretiert würden.
Bleiben Kommentare erhalten?
Die meisten Builds erhalten YAML-Kommentare (#), aber ihre Position relativ zu AST-Knoten kann sich leicht verschieben. Kommentare über Schlüsseln bleiben meist oben; nachgezogene Kommentare in derselben Zeile bleiben angeheftet. Lade nach dem Formatieren neu und prüfe, ob die Kommentarposition noch sinnvoll ist.
Wird das YAML hochgeladen?
Nein. Parsing und Formatierung laufen in deinem Browser über js-yaml oder Ähnliches. Eingefügtes YAML wird nicht übertragen.
Warum verändert mein YAML-Round-Trip Anchors und Aliases?
Mit der YAML-Syntax & (Anchor) und * (Alias) kannst du einen Wert einmal definieren und wiederverwenden. Manche Formatter expandieren Aliases standardmäßig inline und verlieren so die Deduplizierung. Such nach einer Option zum Erhalten der Anchors, falls dein Tooling darauf angewiesen ist.
Was, wenn mein YAML mit Tabs eingerückt ist?
YAML verbietet Tabs zur Einrückung - es müssen Leerzeichen sein. Der Formatter wandelt Tabs je nach Konfiguration entweder in Leerzeichen um oder verweigert das Parsen. Ersetze Tabs vor dem Einfügen durch Leerzeichen, wenn du einen Parse-Fehler bekommst.