Skip to main content

JSON to YAML Converter

Convert JSON to YAML format instantly.

Geprüft von · Zuletzt geprüft

So verwendest du den JSON-zu-YAML-Konverter

  1. Füge JSON in den Eingabebereich ein. Ein vollständiges Dokument, eine aus DevTools kopierte API-Antwort oder ein JSON-Objekt-Body aus Postman funktionieren alle. Der Konverter validiert beim Klicken auf "Konvertieren".
  2. Klicke auf "In YAML konvertieren". Objekte werden zu Block-Mappings, Arrays zu Block-Sequenzen mit - -Markern, und Primitive behalten ihre Typen.
  3. Überprüfe das YAML im Ausgabebereich. Wenn die Eingabe ungültiges JSON ist, meldet das rote Fehlerbanner den Zeichen-Offset des Problems.
  4. Kopiere das Ergebnis in dein Kubernetes-Manifest, deine Docker-Compose-Datei oder dein Ansible-Playbook. Die Ausgabe verwendet zwei Leerzeichen Einrückung, was der De-facto-Standard im gesamten Ökosystem ist.

Im Konverter

Der erste Schritt ist JSON.parse, der einen JavaScript-Wertbaum zurückgibt. Das gibt dem Konverter einen strikten Eingabevertrag: Doppelte Schlüssel sind bereits kollabiert (der letzte gewinnt in jedem modernen JSON-Parser), numerische Strings bleiben Strings, und die einzigen möglichen Werttypen sind Objekte, Arrays, Strings, Zahlen, Booleans und null. Der Konverter geht dann diesen Baum rekursiv durch und gibt YAML-Block-Syntax mit Einrückung proportional zur Tiefe aus.

Strings werden nur bei Bedarf zitiert: Werte, die mit YAML-reservierten Token mehrdeutig wären (true, false, null, yes, no), Werte, die als Zahlen geparst werden, Werte, die mit Sonderzeichen beginnen (-, :, ?, !, &, *, [, {), oder Werte, die Zeilenumbrüche oder eingebettete Anführungszeichen enthalten. Das entspricht den YAML-1.2-Regeln für einfache Skalare, beschrieben unter yaml.org/spec. Leere Arrays geben [] und leere Objekte geben {} im Flow-Stil aus, weil der Block-Stil keine Möglichkeit hat, eine leere Sammlung zu zeigen.

Szenarien, wo das praktisch ist

  • Eine JSON-Konfigurationsdatei zu YAML migrieren für ein Tool wie Serverless Framework oder Helm, das YAML erwartet.
  • API-Antworten in YAML konvertieren für die Einbeziehung in Dokumentation, wo die Lesbarkeit von YAML JSON-Klammern-Suppe schlägt.
  • Test-Fixtures für Go-, Python- oder Ruby-Tests vorbereiten, die YAML-Loader verwenden.
  • Einen in Postman gespeicherten Anfrage-Body nehmen und in ein YAML-Snippet für eine README umwandeln.
  • Eine Kubernetes-ConfigMap erstellen, deren Daten als JSON von einem vorgelagerten Dienst stammen.
  • Ein lesbares Diff einer großen JSON-Konfiguration erzeugen, indem beide Versionen in YAML konvertiert und die YAML-Dateien gedifft werden.

Randfälle

  • Numerische Strings. Ein JSON-Wert von "123" (String) wird zu YAML '123', damit er nicht später als Zahl neu geparst wird. Ohne die Anführungszeichen würde ein YAML-Parser ihn als Ganzzahl zurück roundtrippen.
  • Spezielle Float-Werte. JSON hat kein NaN oder Infinity - das ist ungültiges JSON. Wenn deine Quelle JavaScript-artige Ausgabe mit diesen hat, entferne sie zuerst.
  • Schlüsselzeichen. Schlüssel, die Doppelpunkte, Leerzeichen oder Sondermarker enthalten, werden zitiert. YAML erlaubt fast jeden String als Schlüssel, aber ein bloßes Wort ist einfacher zu lesen, also zitiert der Konverter nur bei Bedarf.
  • Doppelt aussehende Schlüssel. JSON erlaubt doppelte Schlüssel syntaktisch, aber Parser kollabieren sie. Wenn der Konverter die Daten sieht, gibt es bereits nur einen von jedem Schlüssel, also sind Duplikate aus der ursprünglichen Quelle bereits verloren.
  • Tief verschachtelte Strukturen. Einrückung um zwei Leerzeichen bedeutet, dass 20-Ebenen-tiefes JSON 40 führende Leerzeichen pro Zeile produziert. Das ist gültiges YAML, aber schwer zu lesen; erwäge, die Quelle umzustrukturieren, wenn die Tiefe so extrem ist.

Warum JSON und YAML koexistieren

JSON wurde in RFC 8259 (und parallel als ECMA-404) spezifiziert. Es optimiert für maschinelles Parsing: eine kleine strikte Grammatik, keine Kommentare, keine mehrzeiligen Strings, keine Referenzen. YAML, spezifiziert unter yaml.org, optimiert für menschliche Lesbarkeit: einrückungsgesteuerte Struktur, Kommentare, Anker und explizite Typ-Tags. Eine Korrektheitskonsquenz, die es wert ist zu wissen: Jedes JSON-Dokument ist gültiges YAML 1.2 (YAML ist eine strikte Obermenge), aber das Umgekehrte gilt nicht - die meisten echten YAML haben Funktionen, die JSON nicht ausdrücken kann. Diese Asymmetrie ist der Grund, warum YAML dazu neigt, Konfigurationsdateien zu dominieren (von Hand bearbeitet, kommentiert), während JSON Wire-Formate dominiert (maschinell generiert, maschinell konsumiert). Kubernetes akzeptiert beide für dieselbe API und normalisiert intern zu JSON vor der Verarbeitung.

Alternative Konverter

Das Go-basierte yq-Tool (von mikefarah/yq) ist der Community-Favorit für geskriptete Konvertierung. yq -P '.' file.json erzeugt hübsches YAML, das dem Kubernetes-Stilhandbuch entspricht. Python-Benutzer haben ruamel.yaml, das Reihenfolge und Kommentare bewahrt, wenn du jemals zurück roundtrippst. Editor-Plugins (VS Code Redhat YAML, IntelliJ YAML) bieten visuelle JSON-zu-YAML-Konvertierung mit Schema-Validierung. Dieses In-Browser-Tool ist am schnellsten für einmalige Konvertierungen und vermeidet die Sicherheitsreibung des Einfügens proprietärer JSON in einen Cloud-Dienst, aber für wiederholbare Pipeline-Nutzung sind die CLI-Tools oben besser.

Häufig gestellte Fragen

Welche Einrückung verwendet die Ausgabe?

Der Konverter gibt standardmäßig zwei Leerzeichen Einrückung aus, was die in den Kubernetes-, Helm-, Ansible- und Docker-Compose-Ökosystemen verwendete Konvention ist. Vier Leerzeichen Einrückung ist technisch gültiges YAML, sieht aber in diesen Projekten fehlausgerichtet aus, weil ihre Tools und Beispiele alle von zwei ausgehen. Wenn du eine andere Breite benötigst, verarbeite mit einem YAML-Reformatierer wie <code>yq</code> nach.

Wie werden JSON-Booleans und null dargestellt?

Ein JSON-Boolean <code>true</code> wird zum YAML-Literal <code>true</code>, das JSON <code>false</code> wird zu <code>false</code> und <code>null</code> wird zu <code>null</code>. Der Konverter verwendet keine alternativen Schreibweisen wie <code>yes</code>/<code>no</code> oder die Tilde <code>~</code> für null, weil das YAML-1.1-Konventionen sind, die moderne strikte Parser im YAML-1.2-Modus ablehnen oder als Strings behandeln könnten.

Bewahrt es die Reihenfolge der Objekt-Schlüssel?

Ja. JavaScript-Objekte iterieren Schlüssel in Einfügungsreihenfolge für String-Schlüssel gemäß der ECMAScript-Spezifikation (seit ES2015), und der Konverter geht sie in dieser Reihenfolge durch, wenn YAML ausgegeben wird. Wenn dein JSON also <code>apiVersion</code> vor <code>kind</code> vor <code>metadata</code> hat, hat das YAML das auch. Das ist wichtig, weil Kubernetes-CRDs diese Top-Schlüssel konventionell in einer bestimmten Reihenfolge auflisten.

Was passiert mit sehr großen JSON-Dokumenten?

Der Konverter verwendet <code>JSON.parse</code> gefolgt von einem rekursiven Walk, sodass er linear mit der Dokumentgröße skaliert. In der Praxis konvertiert alles unter zehn Megabyte auf einem modernen Laptop in weit unter einer Sekunde. Größere Eingaben können den Tab kurz während des Parsens einfrieren. Für sehr große Payloads bevorzuge das Kommandozeilen- <code>yq</code>, das streamt und effizientere Serialisierung verwendet.

Wird mein JSON zu einem externen Dienst hochgeladen?

Nein. Die Seite liefert eine Preact-Insel, die den Konverter lokal ausführt; es gibt keinen fetch zu einem Backend und keine dauerhafte Speicherung deiner Eingabe. Du kannst mit dem DevTools-Netzwerk-Panel überprüfen - das Klicken auf "Konvertieren" löst null neue Anfragen aus. Weil JSON-Configs routinemäßig Anmeldedaten, Datenbankpasswörter oder persönliche Daten enthalten, ist die Nur-lokal-Garantie wichtig.

Kann ich ein JSON-Array von Top-Level-Elementen konvertieren?

Ja. Ein Top-Level-JSON-Array gibt eine YAML-Blocksequenz an der Wurzel des Dokuments aus. Jedes Element ist mit <code>- </code> als Marker eingerückt. Das ist etwas ungewöhnlich, weil die meisten YAML-Configs ein Objekt an der Wurzel haben, aber es ist vollständig gültig gemäß YAML-Spezifikation und einige Tools (Ansible-Variable-Dateien) erwarten diese Form.

Wie werden verschachtelte Arrays innerhalb von Objekten behandelt?

Arrays innerhalb von Objektwerten verwenden Block-Sequenz-Syntax mit jedem Element in seiner eigenen Zeile. Verschachtelte Arrays (Arrays von Arrays) erzeugen tiefere Einrückungsebenen, und Arrays von Objekten geben den ersten Schlüssel jedes Objekts in derselben Zeile wie den Bindestrich aus. Das stimmt mit den Ausgabe-Konventionen von <code>yq</code> und go-yaml überein und sollte für jeden vertraut sein, der Ansible schreibt.

Was ist mit JSON-Kommentaren?

JSON gemäß RFC 8259 hat keine Kommentar-Syntax; jedes <code>//</code> oder <code>/* */</code> in deiner Quelle bedeutet, dass deine Eingabe kein JSON, sondern JSON5, HJSON oder JSONC ist. <code>JSON.parse</code> lehnt all das ab. Entferne Kommentare vor dem Einfügen oder parse zuerst mit <code>json5</code> in einem Node-Skript. Die YAML-Ausgabe hat auch keine Kommentare, weil es keine Quelle dafür gibt.

Warum sind einige Strings in Anführungszeichen gesetzt und andere nicht?

YAML hat eine Regel, dass einfache (unzitierte) Skalare nicht wie Zahlen, Booleans, null aussehen oder mit reservierten Zeichen beginnen dürfen. Der Konverter zitiert genau diese Fälle und lässt einfache Strings unzitiert für Lesbarkeit. Zum Beispiel wird <code>"version": "1.0"</code> zu <code>version: '1.0'</code>, weil ohne die Anführungszeichen YAML es als die Zahl 1.0 parsen würde und den String-Typ verlieren würde.

Funktioniert die Ausgabe in Kubernetes-Manifesten?

Ja. Das generierte YAML wird sauber mit <code>kubectl apply</code> geparst, das den <code>sigs.k8s.io/yaml</code>-Parser verwendet. Dieser Parser ist streng YAML 1.2 und konvertiert intern zu JSON, bevor er gegen das API-Schema validiert, sodass jedes Roundtrip-sicheres YAML (was dieser Konverter erzeugt) funktioniert. Denke nur daran, die drei Schlüssel <code>apiVersion</code>, <code>kind</code> und <code>metadata</code> auf der obersten Ebene einzubeziehen, die Kubernetes erfordert.

Mehr Developer Tools