JSON in YAML
Für Kubernetes, Compose und CI-Dateien, ohne Ihre Konfiguration irgendwohin zu schicken.
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.