Skip to main content

YAML-zu-JSON-Konverter

YAML sofort in das JSON-Format umwandeln.

Geprüft von · Zuletzt geprüft

Den YAML-zu-JSON-Konverter verwenden

  1. YAML einfügen in den Eingabebereich. Docker-Compose-Dateien, GitHub-Actions-Workflows, Kubernetes-Manifeste, Ansible-Playbooks und .yml-Konfigurationen aus Rails, Django oder Hugo funktionieren alle.
  2. Einen Ausgabe-Stil wählen: 2-stelliges JSON (am häufigsten), 4-stelliges JSON (älterer Python-Stil) oder minimiertes JSON in einer einzigen Zeile (gut zum Weiterleiten in ein anderes Werkzeug).
  3. Auf Konvertieren klicken. Gültiges YAML wird zu strukturiertem JSON auf der rechten Seite; fehlerhafter Input erhält eine Fehlermeldung, die auf die fehlerhafte Zeile zeigt.
  4. Das JSON kopieren mit der Zwischenablage-Schaltfläche oder es in den Geschwister-JSON-zu-YAML-Konverter einfügen, um es hin-und-herzukonvertieren und zu bestätigen, dass die Semantik beibehalten wurde.

Was es tut und wie es funktioniert

YAML ist durch Einrückung blockstrukturiert, was einen einfachen Parser aufwendiger macht, als es aussieht. Der Konverter tokenisiert Zeilen in eine von vier Kategorien: Block-Sequenz-Elemente (beginnend mit - ), Block-Mapping-Einträge (ein Schlüssel gefolgt von :), Skalar-Fortsetzungen und strukturelle Marker (---, ...). Einrückung wird mit einem Stapel von Spaltenoffsets verfolgt, sodass verschachtelte Sequenzen in Mappings und Mappings in Sequenzen korrekt geschachtelt werden. Skalare Werte werden klassifiziert: nicht gequotete Token, die der YAML-Zahlengrammatik entsprechen, werden zu JSON-Zahlen; die literalen Token true, false und null werden zu den JSON-Äquivalenten; und alles andere bleibt als JSON-String.

Sobald die Eingabe in ein JavaScript-Objekt geparst wurde, übernimmt JSON.stringify die Ausgabeformatierung mit dem von dir gewählten Einzug. Gequotete Strings in der Quelle (einfach oder doppelt) werden immer als Strings behandelt, unabhängig vom Inhalt, was so ist, wie du numerisch aussehende Strings wie Postleitzahlen oder Versionsnummern bewahrst. Flow-Stil-Sammlungen ({ key: value } und [ a, b ]) werden neben dem Block-Stil behandelt. Gefaltete und Literal-Block-Skalare (> und |) falten oder bewahren Zeilenwechsel gemäß YAML 1.2.

Echte Anwendungsfälle

  • Ein Kubernetes-Manifest in ein Werkzeug kopieren, das nur JSON-API-Payloads akzeptiert, wie curl gegen /api/v1/namespaces.
  • Einen CI-Workflow debuggen, indem .github/workflows/ci.yml zu JSON konvertiert und in einem JSON-Pfad-Explorer betrachtet wird.
  • Eine Konfigurationsdatei in einen JSON-Schema-Validator einspeisen, der kein YAML nativ unterstützt.
  • Den Unterschied zwischen YAML-Tag-Inferenz und expliziter Typisierung lehren, indem gesehen wird, welche JSON-Typen herauskommen.
  • Ein kleines Konfigurationsschnipsel in JavaScript-Code einbetten, der JSON.parse für Portabilität verwendet.
  • Ein Helm-Chart oder Terraform override.yml auf versteckte doppelte Schlüssel prüfen, die JSON verbietet, aber einige YAML-Parser still akzeptieren.

Grenzfälle und Fallstricke

  • Das Norwegen-Problem. YAML 1.1 parste berüchtigterweise ungequotetes no als boolesches false, was dazu führte, dass der Ländercode "NO" "deaktiviert" bedeutete. YAML 1.2 entfernte diese Aliase, aber viele Parser sind noch im 1.1-Modus. Dieser Konverter folgt YAML 1.2: nur true, false, True, False, TRUE und FALSE sind boolesche Werte.
  • Tabulatoren sind für Einrückung illegal. YAML 1.2 schreibt Leerzeichen vor. Ein versteckter Tabulator erzeugt entweder einen Fehler oder verschachtelt deinen Baum still falsch. Tabulatoren in Leerzeichen konvertieren, bevor sie eingefügt werden, wenn dein Editor sie eingefügt hat.
  • Multi-Dokument-Dateien. YAML kann mehrere durch --- getrennte Dokumente enthalten. Der Konverter verwendet nur das erste Dokument; um alle zu konvertieren, sie manuell in ein JSON-Array einwickeln.
  • Anker und Referenzen. &anker und *ref sind grundlegende YAML-Funktionen, die dieser leichtgewichtige Parser je nach Komplexität möglicherweise abflacht oder verwirft. Sehr enge Helm-Templates, die auf Ankern beruhen, sollten zuerst vollständig gerendert werden.
  • Schlüssel mit Null-Wert. foo: mit nichts nach dem Doppelpunkt ist ein Schlüssel, der auf Null gemappt wird, was durch JSON als "foo": null hin-und-herwandert. Einige Verbraucher erwarten stattdessen, dass der Schlüssel fehlt - beide prüfen.

YAML 1.2 Spezifikation im Überblick

YAML ist definiert unter yaml.org/spec/1.2.2. Das wichtigste Designziel ist, dass jedes gültige JSON-Dokument auch gültiges YAML ist, sodass YAML eine echte Obermenge ist. Die Ergänzungen, die YAML mitbringt, sind Block-Einrückung, Kommentare (#), Anker und Aliase, explizite Tags (!!str, !!int) und gefaltete/literale mehrzeilige Strings. Die 1.2-Revision verfeinerte die Typ-Inferenz, um das YAML-1.1-Booleans-überall-Problem zu vermeiden, und machte JSON ausdrücklich zu einer Untermenge. Die YAML-Test-Matrix verfolgt, wie verschiedene Parser mit dem Standard umgehen; insbesondere standardmäßig Python's PyYAML im YAML-1.1-Modus und go-yaml v2 hatte Grenzfälle, die v3 behoben hat.

Wann ein anderes Werkzeug verwendet werden soll

Für Produktionskonvertierungen yq (Go- oder Python-Editionen) auf der Befehlszeile verwenden; es behandelt Anker, Merges (<<:) und Multi-Dokument-Dateien in voller Spec-Konformität. yq eval -o=json file.yml ist ein einzeiliges Äquivalent. In JavaScript ist die Bibliothek js-yaml der de-facto-Parser und unterstützt sowohl 1.1- als auch 1.2-Modus. Python hat ruamel.yaml, das Kommentare und Reihenfolge besser bewahrt als PyYAML. Dieses Web-Werkzeug ist schneller als alle davon für schnelle Spot-Konvertierungen, besonders auf einem Laptop ohne Node oder Python bei der Hand, aber es als Betrachter statt als kanonischen Konverter für geschäftskritische Konfigurationen behandeln.

Häufig gestellte Fragen

Welche YAML-Version implementiert der Parser?

Er zielt auf YAML-1.2-Semantik ab, was bedeutet, dass er <code>yes</code>, <code>no</code>, <code>on</code> oder <code>off</code> nicht automatisch in boolesche Werte umwandelt - eine Änderung gegenüber YAML 1.1, die das berüchtigte Norwegen-Problem beseitigte. Nur die literalen Token <code>true</code> und <code>false</code> sind boolesche Werte. Wenn du eine Konfiguration eingibst, die ursprünglich für einen 1.1-Parser geschrieben wurde, die Ausgabe überprüfen, um zu bestätigen, dass diese Token jetzt Strings sind.

Bewahrt der Konverter die Schlüssel-Reihenfolge?

Ja. JavaScript-Objekte bewahren die Einfügereihenfolge für String-Schlüssel gemäß der ECMAScript-Spezifikation, und <code>JSON.stringify</code> gibt sie in dieser Reihenfolge aus. Daher sieht ein Kubernetes-Manifest, bei dem <code>apiVersion</code> vor <code>kind</code> erscheinen muss, in der JSON- Ausgabe immer noch korrekt aus. Diese Garantie gilt für jeden modernen Browser, weil die Spezifikation sie seit ES2015 vorschreibt.

Wie werden mehrzeilige Strings konvertiert?

YAML-Literal-Block-Skalare, eingeleitet durch <code>|</code>, bewahren Zeilenwechsel; gefaltete Skalare, eingeleitet durch <code>&gt;</code>, fassen Zeilenumbrüche in einzelne Leerzeichen zusammen, außer um leere Zeilen herum. Beide landen als einfache JSON-Strings mit ihrem bewahrten oder gefalteten Leerzeichen eingebettet. JSON selbst hat keine mehrzeilige String-Syntax, daher wirst du <code>\\n</code>-Escapes in der Ausgabe sehen, wo deine Quelle buchstäbliche Zeilenwechsel hatte.

Kann ich YAML zu JSON und zurück konvertieren, ohne etwas zu verlieren?

Für die meisten Konfigurationen ja, aber YAML-Funktionen ohne JSON-Äquivalente gehen verloren. Anker, Aliase, explizite Tags (<code>!!str</code>, <code>!!set</code>), Kommentare und der Unterschied zwischen einfach- und doppelt gequoteten Strings verschwinden alle in JSON. Wenn du YAML zu JSON konvertierst und zurück durch das Geschwister-Werkzeug, erhältst du eine funktional äquivalente, aber textuell andere Datei.

Wird mein YAML an einen Remote-Server gesendet?

Nein. Der Konverter ist eine Preact-Komponente, die mit dem Seiten-Bundle ausgeliefert wird und vollständig im Haupt-Thread deines Browser-Tabs ausgeführt wird. Es gibt keinen fetch-Aufruf an ein Backend, kein WebSocket und kein Tracking des eingefügten Inhalts. Da YAML oft Geheimnisse enthält (API-Schlüssel in einer Docker-Compose-Datei, Zugangsdaten in einem Ansible- Vault), ist diese Garantie wichtig - nichts, was du in den Textbereich eingibst, verlässt deinen Rechner.

Unterstützt es Multi-Dokument-YAML?

Nur das erste durch <code>---</code> getrennte Dokument wird konvertiert. Multi-Dokument-YAML ist am häufigsten in Kubernetes-Manifesten und <code>helm template</code>-Ausgaben. Um alle zu konvertieren, die Quelle am Dokument-Trennzeichen aufteilen, jedes Stück separat konvertieren und die Ergebnisse in ein JSON-Array einwickeln. Eine zukünftige Version könnte automatisch ein JSON-Array für Multi-Doc-Eingaben ausgeben.

Wie werden doppelte Schlüssel behandelt?

YAML 1.2 verbietet doppelte Schlüssel, und strenge Parser lehnen die Datei ab. Dieser Konverter ist tolerant: spätere Vorkommen überschreiben frühere, was dem Verhalten von PyYAML und go-yaml entspricht. Das ist die häufigste Ursache subtiler Konfig-Fehler, also auf Schlüssel achten, die in langen Dateien zweimal erscheinen.

Kann ich JSON zurück zu YAML konvertieren?

Nicht mit diesem Werkzeug - der Geschwister-JSON-zu-YAML-Konverter auf derselben Seite behandelt diese Richtung. Beide Konverter verwenden unabhängige Implementierungen, sodass das Hin-und-Zurück-Konvertieren nicht garantiert byte-identisches YAML zu erzeugen; Kommentare, Ankernamen und Quotierungsentscheidungen überleben nicht. <code>yq</code> auf der Befehlszeile verwenden, wenn byte-identische Hin-und-Zurückkonvertierungen wichtig sind.

Was passiert mit YAML-Kommentaren?

Sie verschwinden. JSON hat keine Kommentarsyntax, daher verwirft der Konverter jede mit <code>#</code> beginnende Zeile und jeden Inline-Kommentar nach einem Wert. Wenn deine Kommentare bedeutungsvolle Informationen enthalten (Lizenzierung, Erklärung von magischen Konstanten), sie manuell in die Verbraucherdatei kopieren oder zu einem Format wie JSON5 oder HJSON migrieren, das Kommentare erlaubt.

Sind Tabulatoren wirklich bei der Einrückung verboten?

Ja. YAML 1.2 listet das Tabulatorzeichen ausdrücklich als nicht erlaubt als führenden Leerzeichen für Einrückung auf. Eine Datei mit einem unerwarteten Tabulator ist technisch ungültiges YAML, und verschiedene Parser reagieren unterschiedlich: einige lehnen sie ab, andere erhöhen den Tabulator stillschweigend auf eine Anzahl von Leerzeichen. Wenn die Konvertierung unerwartet fehlschlägt, in der Quelle nach Tabulatorzeichen suchen und sie durch Leerzeichen ersetzen.

Verwandte Tools

Mehr Developer Tools

ZeroUtil unterstützen