Zum Hauptinhalt springen

JSON in YAML umwandeln

Dieses Tool wandelt ein Dokument in Ihrem Browser in YAML um und verifiziert das Ergebnis durch erneutes Parsen. Die Regel, die das ermöglicht: Eine Zeichenkette wird in Anführungszeichen gesetzt, sobald sie ohne diese etwas anderes ergeben würde – die Zeichenkette „no“ behält also ihre Anführungszeichen, und dasselbe gilt für „007“, „null“ und „12:30“.

Nur lokal
Einrückung
JSON
0 B1 ZeileZ. 1, Sp. 1
YAMLschreibgeschützt
0 B1 Zeile

Wie funktioniert JSON in YAML umwandeln?

Von JSON zu YAML klingt nach der einfachen Richtung – YAML ist eine Obermenge, jedes JSON-Dokument ist also bereits gültiges YAML. Das stimmt, und es ist nicht die Aufgabe. Die Aufgabe besteht darin, YAML zu erzeugen, das ein Mensch gern liest – das heißt Blockstil statt Flow-Stil, und genau dort entsteht das Korrektheitsproblem.

Anführungszeichen sind nicht kosmetisch

YAML löst Skalare ohne Anführungszeichen anhand eines Musters auf. Schreiben Sie die Zeichenkette no ohne Anführungszeichen, lädt ein YAML-1.1-Reader den booleschen Wert false. Schreiben Sie 007 und Sie erhalten die Zahl 7. Schreiben Sie null, true, 12:30, 0x1f oder .inf, kommt jedes davon als etwas zurück, das keine Zeichenkette ist.

Der Emitter spielt die Auflösungsregeln deshalb rückwärts durch: Eine Zeichenkette wird in Anführungszeichen gesetzt, wann immer sie ohne diese zu etwas anderem aufgelöst würde als zu genau dieser Zeichenkette. Er setzt auch die Tokens in Anführungszeichen, die 1.1 anders auflösen würde, obwohl 1.2 es nicht täte, weil die Ausgabe überall dasselbe bedeuten soll, wo sie gelesen wird. Deshalb hat das Ergebnis an Stellen Anführungszeichen, die unnötig aussehen – keines davon ist verzichtbar.

Der Roundtrip wird geprüft, nicht behauptet

Jede Umwandlung wird zurückgeparst und mit dem ursprünglichen JSON verglichen, und das Ergebnis wird in der Statistikleiste ausgewiesen. Eine Anführungsregel, die auch nur einen Fall übersieht, ist genau die Art von Fehler, die plausibel aussehende Ausgabe und eine korrupte Konfiguration produziert; deshalb läuft die Prüfung über Ihr Dokument und nicht nur in einer Testsuite.

Mehrzeilige Zeichenketten werden zu Blockskalaren

Eine Zeichenkette mit Zeilenumbrüchen wird als |-Block geschrieben – das ist der Grund, warum Leute Zertifikate, Skripte und SQL in YAML statt in JSON ablegen: Ein PEM-Schlüssel ist in JSON eine einzige unlesbare Zeile voller \n-Escapes. Der Chomping-Indikator folgt den Daten – |, wenn die Zeichenkette mit einem Zeilenumbruch endet, |-, wenn nicht – sodass das abschließende Byte erhalten bleibt.

Für Schlüssel gilt dieselbe Anführungsregel wie für Werte

Ein Schlüssel ist auch ein Skalar. y: 2 lädt in einem 1.1-Reader als {True: 2}, und on: – der zweite Schlüssel jedes GitHub-Actions-Workflows – ist das bekannteste Beispiel. Schlüssel werden genauso behandelt wie Werte, deshalb gibt das Tool "on" in Anführungszeichen aus.

JSON

{
  "regions": ["NO", "SE"],
  "build": "007",
  "enabled": true
}

YAML

regions:
- "NO"
- "SE"
build: "007"
enabled: true

Welche Optionen und Sonderfälle unterstützt JSON in YAML umwandeln?

Technische Referenz und Optionen
ParameterTypStandardVerhalten & Sonderfälle
EinrückungLeerzeichen2Leerzeichen pro Ebene. YAML verbietet Tabulatoren in der Einrückung vollständig, daher ist dies eine Anzahl und kein Zeichen.
Sequenzen einrückenBooleschoffOff platziert Listendashs in der Spalte des übergeordneten Schlüssels, was von Hand geschriebene Kubernetes-Manifesten ähnelt. On rückt sie eine Ebene ein, was die meisten Bibliotheken ausgeben. Beides ist gültig.
Schlüssel sortierenBooleschoffAlphabetisch statt in der Reihenfolge des Dokuments. Nützlich für den Vergleich von Konfigurationen, die in unterschiedlicher Reihenfolge geschrieben wurden.
DokumentanfangBooleschoffGibt den ----Marker aus. Erforderlich, wenn mehrere Dokumente zu einer Datei verkettet werden, wie es bei Kubernetes-Manifesten üblich ist.
Mehrdeutige Zeichenkettenin Anführungszeichenimmerno, yes, on, off, y, n, true, null, ~, 007, 12:30, 0x1f, .inf und die leere Zeichenkette. Jede davon würde als Nicht-Zeichenkette interpretiert, wenn sie ohne Anführungszeichen geschrieben würde.
Mehrzeilige ZeichenkettenBlockskalaronWird als |-Block geschrieben, wobei der Chomp-Indikator darauf abgestimmt ist, ob die Zeichenkette mit einem Zeilenumbruch endet, sodass kein Byte hinzugefügt oder verloren geht.
Leere Container[] und {}explizitEin leeres Array oder Objekt wird in Flow-Schreibweise ausgegeben. Das vollständige Weglassen würde eine leere Liste von null unterscheidbar machen.
nullnullnullWird als das Wort null geschrieben und nicht leer gelassen oder als ~, weil dies die Schreibweise ist, die für eine Person und jeden Parser gleich gelesen wird.
Hin und zurücküberprüftbei jeder KonvertierungDie Ausgabe wird zurückgeparst und mit der Eingabe verglichen. Das Ergebnis wird in der Statistenleiste angegeben und nicht angenommen.

Häufig gestellte Fragen

Warum hat es um meine ganz normal aussehende Zeichenkette Anführungszeichen gesetzt?

Weil sie ohne Anführungszeichen zu etwas anderem aufgelöst würde. „no“ wird in einem YAML-1.1-Reader zum booleschen Wert false , „007“ wird zur Zahl 7, „12:30“ wird zu einer Sexagesimalzahl und „null“ wird zu null. Die Anführungszeichen sind das Einzige, was den Wert eine Zeichenkette lässt – das bestätigt der Roundtrip-Check in der Statistikleiste an Ihrem tatsächlichen Dokument.

Ist YAML wirklich kleiner als JSON?

Meistens, und die Statistikleiste zeigt die Zahl für Ihr Dokument. Dass geschweifte Klammern, eckige Klammern und die Anführungszeichen um Schlüssel wegfallen, macht einen erstaunlichen Teil einer Konfigurationsdatei aus. Was YAML gegenüber JSON bringt, ist allerdings nicht die Größe – es sind Kommentare, die JSON gar nicht ausdrücken kann, und lesbare mehrzeilige Zeichenketten.

Bekomme ich meine Kommentare zurück?

Nein, und nichts kann das. JSON hat keine Kommentare; sobald ein Dokument JSON ist, sind sie also schon weg – in der Eingabe gibt es nichts mehr wiederherzustellen. Wenn Sie eine YAML-Datei bearbeiten, bearbeiten Sie das YAML: Ein JSON-Roundtrip entfernt jeden Kommentar und sortiert nichts zurück.

Welchen Listenstil sollte ich verwenden?

Beliebig; beide parsen identisch. Striche auf Höhe des übergeordneten Schlüssels sehen so aus wie handgeschriebene Kubernetes-Manifeste und GitHub-Workflows, und diese Variante spart bei tief verschachtelten Dateien zwei Spalten Einrückung. Eingerückte Striche geben die meisten Bibliotheken aus, und manche Hausstyles verlangen sie. Nehmen Sie die Variante, die zu den umliegenden Dateien passt.

Warum ist meine mehrzeilige Zeichenkette nicht mehr wie in JSON escapet?

Weil sie als |-Blockskalar geschrieben wird, der echte Zeilenumbrüche bewahrt statt \n-Escapes. Das ist der beste einzelne Grund, YAML für eine Konfigurationsdatei zu verwenden: Ein PEM-Zertifikat oder ein Shellskript ist in YAML lesbar und in JSON eine einzige Zeile mit 3.000 Zeichen. Der Chomping-Indikator wird so gewählt, dass die Information erhalten bleibt, ob Ihre Zeichenkette mit einem Zeilenumbruch endet.

Wird mein JSON hochgeladen?

Nein. Parsen, Umwandlung und der verifizierende Roundtrip laufen alle in Ihrem Browser. Bestätigen können Sie das im Netzwerk-Tab. Das ist hier relevant, weil JSON, das zu YAML umgewandelt wird, meist kurz davor ist, eine Konfigurationsdatei zu werden – und Konfigurationsdateien enthalten Verbindungszeichenfolgen und Schlüssel.