Zum Inhalt springen
jsonbeautifiers
Deutsch

JSON in YAML

Für Kubernetes, Compose und CI-Dateien, ohne Ihre Konfiguration irgendwohin zu schicken.

JSON
YAML

Nichts, was Sie einfügen, verlässt Ihren Browser. Die connect-src Erlaubnisliste macht daraus eine Garantie des Browsers statt eines Versprechens. Selbst überprüfen

Wandeln Sie JSON in YAML um - für Kubernetes-Manifeste, Docker-Compose-Dateien, GitHub-Actions-Workflows und alles andere, was das lesbare Format bevorzugt.

Da YAML eine Obermenge von JSON ist, gelingt diese Umwandlung immer. Interessant ist die Gegenrichtung.

Was sich ändert und was nicht

Jeder JSON-Wert hat eine YAML-Entsprechung, es geht also nichts verloren. Objekte werden zu Mappings, Arrays zu Sequenzen, und die Anführungszeichen um Schlüssel und einfache Zeichenketten verschwinden.

Zeichenketten, die man für etwas anderes halten könnte, behalten ihre Anführungszeichen. Dazu gehören das Wort no, das Wort yes, alles, was wie eine Zahl aussieht, und alles, was wie ein Datum aussieht. Der Dumper ist hier absichtlich vorsichtig, aus dem Grund, der auf der Seite YAML in JSON steht.

Große Ganzzahlen

YAML kennt Ganzzahlen beliebiger Genauigkeit, aber der Wert muss unterwegs trotzdem JavaScript überstehen. Eine Ganzzahl über 2^53-1 wird hier als quotierte Zeichenkette geschrieben, damit keine Ziffern verloren gehen, und die Umwandlung sagt, dass sie das getan hat. Stillschweigend eine gerundete Zahl auszugeben wäre schlimmer.

Zeilenbreite

Der Zeilenumbruch ist standardmäßig aus. YAML-Dumper brechen lange Zeichenketten traditionell bei 80 Spalten um, was für Fließtext in Ordnung und für eine URL, einen Base64-Block oder eine Kommandozeile furchtbar ist, weil die umbrochene Form schwerer zu grepen und zu bearbeiten ist. Nicht umbrochene Ausgabe ist das, was fast alle wollen.

How to do this in code

Umwandeln im Code.

py Python

PyYAML sortiert Schlüssel standardmäßig und ordnet damit klammheimlich eine Konfigurationsdatei um, die Sie originalgetreu umwandeln wollten.

import json, yaml

data = json.loads(text)
out = yaml.safe_dump(
    data,
    sort_keys=False,        # default is True, which reorders your file
    default_flow_style=False,
    allow_unicode=True,     # otherwise é becomes an escape
    width=10**6,            # effectively no wrapping
)
sh Shell
# yq, the YAML counterpart to jq
yq -P eval . input.json > output.yaml

# Or via Python, with no extra install
python -c 'import sys,json,yaml; yaml.safe_dump(json.load(sys.stdin), sys.stdout, sort_keys=False)' < in.json
js JavaScript
import { dump } from 'js-yaml';

const yaml = dump(JSON.parse(text), {
  lineWidth: -1,    // no wrapping
  noRefs: true,     // no anchors and aliases in the output
});

Häufige Fragen

Ist YAML wirklich eine Obermenge von JSON?
YAML 1.2 ist es, per Entwurf. Jedes gültige JSON-Dokument ist gültiges YAML. YAML 1.1 war es nicht ganz - ein weiterer Grund, warum die Version zählt.
Warum stehen manche meiner Zeichenketten in der Ausgabe in Anführungszeichen?
Weil sie ohne Anführungszeichen als etwas anderes gelesen würden. no, yes, on, off, true, null, eine nackte Zahl und alles Datumsförmige brauchen Anführungszeichen, um in zumindest manchen YAML-Parsern Zeichenketten zu bleiben. Der Dumper ist an Ihrer Stelle vorsichtig.
Kann ich meine Kommentare bei der Umwandlung in die Gegenrichtung behalten?
Nein. JSON hat keine Kommentarsyntax, eine YAML-Datei mit Kommentaren verliert sie auf dem Weg zu JSON dauerhaft. Das ist eine Einbahnstraße, von der man wissen sollte, bevor man eine von Hand gepflegte Konfigurationsdatei umwandelt.