So funktioniert es
Wähle oben die Richtung (JSON → YAML oder YAML → JSON) und füge deine Daten ins Eingabefeld ein – das Ergebnis wird angezeigt. Bei JSON → YAML kannst du die Einrückung (2 oder 4 Leerzeichen) wählen und die Schlüssel sortieren lassen; bei YAML → JSON wählst du die Einrückung (2 Leerzeichen, 4 Leerzeichen oder Tab) und ob mehrere Dokumente in ein Array kommen. Das Ergebnis kannst du kopieren oder als .yaml- bzw. .json-Datei herunterladen. Mit „Datei öffnen“ lädst du eine .json-, .yaml- oder .yml-Datei; die Richtung ergibt sich aus der Dateiendung. Wechselst du die Richtung, wandert das gerade erzeugte Ergebnis ins Eingabefeld, sodass du es direkt zurückwandeln kannst. Ist die Eingabe ungültig, siehst du statt eines Ergebnisses Zeile und Spalte des Fehlers samt umgebendem Code.
Bei der ersten Umwandlung wird die yaml-Bibliothek geladen.
Wie JSON und YAML zusammenhängen
Beide Formate beschreiben Daten mit Objekten (Mappings), Arrays (Sequenzen), Strings, Zahlen, booleschen Werten und null. JSON kennzeichnet die Struktur mit geschweiften und eckigen Klammern sowie doppelten Anführungszeichen; YAML nutzt vor allem Einrückung, - und : und ist dadurch für Menschen leichter zu lesen und zu bearbeiten. YAML 1.2 erschien 2009 und hatte vor allem das Ziel, YAML zu einer strikten Obermenge von JSON zu machen. Deshalb lässt sich gültiges JSON fast immer auch als YAML lesen, und du kannst JSON auch im Modus YAML → JSON einfügen. Umgekehrt gilt das nicht: Was JSON nicht kennt – Kommentare, Anker, mehrere Dokumente –, fällt auf dem Weg nach JSON weg oder wird aufgelöst.
Was sich bei der Umwandlung ändert
- Kommentare: Die JSON-Grammatik (RFC 8259) sieht keinen Platz für Kommentare vor, daher fallen sie bei YAML → JSON alle weg. Auch die YAML-Spezifikation legt fest, dass Kommentare nur zur Darstellung gehören und die Daten nicht beeinflussen. Willst du eine Notiz behalten, schreib sie vor dem Umwandeln als Schlüssel mit einem String als Wert, etwa
_comment: "staging port"; im Ergebnis steht dann"_comment": "staging port". Nicht jedes#ist ein Kommentar: Ein#ohne Leerzeichen davor, wie inhttp://a.com/#frag, und ein#innerhalb von Anführungszeichen bleiben Teil des Werts. Besteht die Eingabe nur aus Kommentaren, erscheint der Fehler „Es gibt kein YAML-Dokument zum Umwandeln. Prüfe, ob die Eingabe nur Kommentare enthält.“ - Anker und Aliase (
&name,*name): Der referenzierte Wert wird an Ort und Stelle kopiert. Um den „Billion Laughs“-Angriff abzuwehren, bei dem sich Aliase exponentiell vervielfachen, bricht die Umwandlung ab, wenn Aliase zu oft aufgelöst werden (Standardgrenze der Bibliothek yaml,maxAliasCount100). Auch eine ganz normale Datei, die kein Angriff ist, bricht mit demselben Fehler ab, sobald ein einzelner Anker von 100 Aliasen referenziert wird (99 werden noch umgewandelt; die Größe des Werts spielt keine Rolle, und ein<<-Merge zählt als einer). Wird ein Wert, der selbst Aliase enthält, wiederum per Alias referenziert, multiplizieren sich die Zahlen, und die Umwandlung bricht früher ab. Ersetze in dem Fall einige Aliase auf diesen Anker durch die eigentlichen Werte. - Merge-Schlüssel (
<<): Sie gehören zu keinem Schema von YAML 1.2, sind aber in Konfigurationsdateien wie docker compose weit verbreitet. Deshalb werden sie nach den Merge-Regeln von YAML 1.1 aufgelöst. - Mehrere Dokumente (
---): Ist bei YAML → JSON „Mehrere Dokumente (—) als Array“ eingeschaltet (Standard), wird jedes Dokument zu einem Element eines JSON-Arrays, und beim Ergebnis steht die Anzahl, zum Beispiel „3 Dokumente“. Schaltest du es aus, wird nur das erste Dokument umgewandelt, und eine Warnung nennt die Zahl der übrigen. Ein einzelnes Dokument landet unabhängig von der Einstellung nie in einem Array. Endet die Datei mit einem---ohne Inhalt dahinter, zählt das als leeres Dokument und hängt einnullans Ende des Arrays – lösch die Zeile, wenn du das nicht willst. JSON → YAML schreibt immer ein einziges Dokument: Ein Array auf oberster Ebene wird nicht in mehrere durch---getrennte Dokumente aufgeteilt. - Reihenfolge der Schlüssel: Laut beiden Spezifikationen haben Objektschlüssel keine Reihenfolge, das Tool behält aber die Eingabereihenfolge bei (zahlenartige Schlüssel wie
"2"rutschen nicht nach vorn). Schalte bei JSON → YAML „Schlüssel sortieren“ ein, um die Schlüssel aller Objekte nach Unicode-Codeeinheiten zu sortieren. - Tags: Unbekannte Tags wie
!Refwerden entfernt, nur der Wert wird übernommen, und du bekommst eine Warnung. Ein getaggter Wert wie!Ref 3oder!Ref truewird dabei zum String, während getaggte Arrays und Objekte ihre Struktur und die enthaltenen Werte behalten. - Werte, die JSON nicht kennt:
.infund.nangibt es in JSON nicht; sie werden mit Warnung zunull. YAML-Schlüssel, die Arrays oder Objekte sind, werden als JSON-Text geschrieben. - Doppelte Schlüssel: Derselbe Schlüssel zweimal in einem YAML-Mapping verstößt gegen die Spezifikation und wird als Fehler gemeldet. Derselbe Schlüssel zweimal in einem JSON-Objekt behält wie
JSON.parseim Browser nur den letzten Wert, mit Warnung.
Das Norwegen-Problem: yes, no, on, off
YAML 1.1 las auch y, yes, on, n, no und off (in mehreren Schreibweisen) als boolesche Werte. Wer den Ländercode von Norwegen, NO, ohne Anführungszeichen in eine Liste schrieb, bekam also false – daher der Name „Norwegen-Problem“. Das Core-Schema von YAML 1.2 hat boolesche Werte auf true und false (und deren großgeschriebene Formen wie True und TRUE) beschränkt. Das Tool liest YAML nach diesem Standard, also bleiben NO, yes und off Strings. Eine Einstellung, mit der das Tool YAML wie in Version 1.1 liest, gibt es nicht; schreib deshalb im YAML selbst jeden Wert, den du als booleschen Wert brauchst, als true oder false. Eine gemischte Schreibweise wie tRue ist ein String, ebenso ein Wert in Anführungszeichen wie "true".
Manche Tools folgen aber noch den Regeln von YAML 1.1. Darum setzt das Tool bei JSON → YAML Strings in doppelte Anführungszeichen, die ein 1.1-Parser anders lesen könnte: boolesch wirkende Werte (yes, no, on, off, y, n usw.), datumsartige Werte (2026-09-28), sexagesimale Werte (Basis 60, 1:20), Zahlen mit Unterstrich (1_000) und den Merge-Schlüssel <<. Ein Wert in Anführungszeichen ist in 1.1 wie in 1.2 ein String.
Große Ganzzahlen und Zahlengenauigkeit
JavaScript-Zahlen sind IEEE-754-Doubles; bei Ganzzahlen über 2^53 - 1 (9007199254740991, 16 Stellen) können sich die letzten Ziffern ändern. Das Tool behandelt Ganzzahlen in beide Richtungen als BigInt, sodass auch große Werte wie 64-Bit-IDs Ziffer für Ziffer ankommen. Bei JSON → YAML bleibt auch eine abschließende Null wie in 1.0 so, wie du sie eingegeben hast. Bei YAML → JSON wird 1.0 zu 1.
Bei YAML → JSON gilt ein 01234 ohne Anführungszeichen als Ganzzahl und wird zu 1234; genauso wird 1.10 zu 1.1, 0x1F zu 31 und 0o14 zu 12. Eine Postleitzahl, eine Versionsnummer oder ein anderer Code, der exakt so erhalten bleiben muss, braucht im YAML Anführungszeichen, etwa "01234" – JSON bekommt ihn dann als String. JSON → YAML schreibt zahlenartige Strings wie "01234" oder "12345678901234567890" mit Anführungszeichen, sodass beim erneuten Einlesen dieses YAML wieder Strings herauskommen.
Dezimalzahlen werden in beide Richtungen als Doubles behandelt; eine Dezimalzahl mit vielen signifikanten Stellen wie 0.1234567890123456789 wird deshalb in jeder Richtung auf das nächstgelegene Double gerundet. Zahlen in Exponentialschreibweise ändern ihre Form: Bei JSON → YAML wird 1e3 zu 1e+3, bei YAML → JSON wird 1e3 zu 1000. Ein Wert außerhalb des Double-Bereichs wie 1e400 wird bei JSON → YAML zu .inf. Liest das Programm, das dein JSON verarbeitet, große Ganzzahlen als normale Zahlen, kann dort trotzdem Genauigkeit verloren gehen – wenn der exakte Wert wichtig ist, ist es sicherer, ihn schon an der Quelle als String zu speichern.
Wofür du es brauchst
- Kubernetes-Manifeste: üblicherweise YAML, JSON geht aber auch, und kubectl wandelt das Manifest beim API-Aufruf in JSON oder ein anderes Format um. Praktisch, um eine API-Antwort (JSON) in ein Manifest (YAML) zu überführen oder umgekehrt.
- GitHub-Actions-Workflows:
.yml- oder.yaml-Dateien im Ordner.github/workflows, in YAML-Syntax. Nützlich, wenn du per Skript erzeugte JSON-Konfiguration in einen Workflow übernimmst. - docker compose: Der Standard-Dateiname ist
compose.yaml; mit Ankern, Aliasen und Merge-Schlüsseln (<<) lassen sich Service-Einstellungen wiederverwenden. Die Umwandlung von YAML in JSON zeigt dir die endgültigen Werte mit allen aufgelösten Merges.
