Zwischen JSON und YAML konvertieren
- Dashboard
- Dokumentation
- API
Wofür dient dieser JSON-/YAML-Konverter?
Dieses Tool wandelt ein YAML-Dokument in JSON und umgekehrt um, wobei die Datenstruktur (Objekte, Arrays, skalare Typen) erhalten bleibt. Die Konvertierung von JSON nach YAML oder YAML nach JSON ist im Entwicklungsalltag eine häufige Operation: Man generiert eine YAML-OpenAPI-Datei aus einer JSON-Spezifikation, konvertiert die Ausgabe einer REST-API in YAML, um sie in ein Konfigurations-Repository einzuchecken, übersetzt ein Kubernetes-YAML-Manifest in JSON, um es an kubectl --dry-run=client -o json zu übergeben, oder gleicht einen GitHub-Actions-Workflow mit einem JSON-Schema ab. Allgemeiner ist es die Brücke zwischen der Welt des Datenaustauschs (JSON) und der von Hand editierbaren Konfiguration (YAML).
YAML vs. JSON: direkter Vergleich
JSON und YAML decken ähnliche Bedürfnisse, aber unterschiedliche Anwendungsfälle ab. Die folgende Tabelle fasst die wichtigsten technischen Unterschiede zusammen, die bei der Wahl zwischen beiden je nach Kontext helfen.
| Kriterium | JSON | YAML |
|---|---|---|
| Menschliche Lesbarkeit | Mittel (Klammern, Anführungszeichen überall) | Hoch (Einrückung, wenig Interpunktion) |
| Ausführlichkeit | Ausführlicher | Knapper |
| Kommentare | Nicht unterstützt | Unterstützt (# commentaire) |
| Mehrere Dokumente in einer Datei | Nein | Ja, über den Trenner --- |
| Anchors und Aliases (Wiederverwendung) | Nein | Ja (&anchor und *anchor) |
| Typsystem | Strikt (string, number, bool, null, array, object) | Implizite Coercion (yes, no, null, Datumsangaben, interpretierte Skalare) |
| Parsing-Performance | Sehr schnell, überall native Parser | Langsamer, weitaus umfassendere Grammatik |
| Akzeptanz für REST-APIs | De-facto-Standard | Selten |
| Akzeptanz für Konfiguration | Selten (außer package.json, tsconfig.json) |
De-facto-Standard (Kubernetes, CI/CD, Ansible) |
Wann JSON verwenden?
JSON setzt sich durch, sobald ein Programm mit einem anderen Programm spricht. Seine typischen Anwendungsfälle:
- REST- und GraphQL-APIs: Anfrage- und Antwort-Payloads.
- Datenaustausch zwischen Microservices und Message-Queues.
- Nativer JavaScript-Code:
JSON.parseundJSON.stringifyohne Abhängigkeit. - Speicherung im Browser:
localStorage,sessionStorage, IndexedDB. - AJAX-Anfragen und
fetch. - Binäre oder Stream-orientierte Varianten: BSON (MongoDB), JSON Lines (Logs, ML-Datensätze), MessagePack.
- Konfiguration von JS-/TS-Tools:
package.json,tsconfig.json,composer.json.
Wann YAML verwenden?
YAML setzt sich durch, sobald ein Mensch die Datei regelmäßig bearbeitet. Seine typischen Anwendungsfälle:
- Docker Compose (
docker-compose.yml) und Stack-Profile. - Kubernetes-Manifeste (Deployment, Service, Ingress, Helm Charts).
- Ansible-Playbooks und Inventare.
- CI/CD-Pipelines: GitHub Actions, GitLab CI, CircleCI, Bitbucket Pipelines.
- OpenAPI-/Swagger- und AsyncAPI-Spezifikationen.
- Annotierte Anwendungskonfiguration (Symfony, Spring Boot, Rails), wo Kommentare nützlich sind.
- Häufig von Hand bearbeitete Dateien, bei denen Knappheit und Lesbarkeit vor Parsing-Geschwindigkeit gehen.
Häufige Stolperfallen in YAML
YAML ist freizügiger als JSON, was es zu einem mächtigen, aber tückischen Format macht. Die häufigsten Stolperfallen:
- Einrückung: Tabulatoren sind durch die Spezifikation verboten, nur Leerzeichen sind gültig. Beide zu mischen oder die Anzahl der Leerzeichen in einem Block zu ändern, zerstört das Parsing.
- Automatische Skalar-Coercion:
yes,no,on,off,true,false,null,None,~werden als Booleans oder null geparst. Tückisches Beispiel: Eine nicht quotierte Postleitzahl01234wird zur ganzen Zahl1234, und ein LändernameNO(Norwegen) wird zufalse. Setzen Sie mehrdeutige Zeichenketten immer in Anführungszeichen. - Mehrzeilige Strings:
|(block literal) bewahrt die Zeilenumbrüche, während>(folded) die Zeilenumbrüche durch Leerzeichen ersetzt. Die Chomping-Indikatoren-und+passen das Verhalten am Ende-Umbruch an. - YAML 1.1 vs. 1.2: Die 1.1 (noch sehr verbreitet, zum Beispiel über PyYAML standardmäßig) behandelt
yes/no/on/offals Booleans, was die 1.2 entfernt hat. Auch das Verhalten bei oktalen Zahlen unterscheidet sich. - Implizite Datumsangaben:
2024-01-15ohne Anführungszeichen wird von einigen Parsern als Datumsobjekt interpretiert, nicht als Zeichenkette.
Beispiele nebeneinander
Dasselbe Dokument, ausgedrückt in JSON und dann in YAML. Einfache Konfiguration einer Anwendung mit ihren Abhängigkeiten und ihrer Umgebung:
JSON-Version
{
"name": "cdrn-app",
"version": "1.14.2",
"environment": "production",
"dependencies": {
"php": "^8.3",
"symfony/framework-bundle": "^7.0",
"doctrine/orm": "^3.0"
},
"features": ["cache", "mailer", "queue"],
"debug": false
}
Äquivalente YAML-Version
# Configuration de l'application
name: cdrn-app
version: 1.14.2
environment: production
dependencies:
php: '^8.3'
symfony/framework-bundle: '^7.0'
doctrine/orm: '^3.0'
features:
- cache
- mailer
- queue
debug: false
Die YAML-Version ist in Zeichen etwa 25 % kürzer, akzeptiert einen Kommentar am Anfang und liest sich wie eine Liste von Eigenschaften ohne syntaktisches Rauschen.
So verwenden Sie den Konverter
Schritte zum Konvertieren Ihrer Daten:
- Fügen Sie Ihr Quelldokument (JSON oder YAML) in das Eingabefeld ein.
- Wählen Sie die gewünschte Konvertierungsrichtung (JSON nach YAML oder YAML nach JSON).
- Klicken Sie auf die Konvertierungsschaltfläche: Das formatierte Ergebnis erscheint im Ausgabebereich.
- Prüfen Sie die Ausgabe und verwenden Sie dann die Kopierschaltfläche, um das Ergebnis in Ihre Zwischenablage zu übernehmen.
Die Konvertierung erfolgt je nach Tooling lokal in Ihrem Browser oder über eine dedizierte Serverroute: Es werden keine sensiblen Daten gespeichert.
Häufig gestellte Fragen
JSON oder YAML für meine Konfigurationsdateien?
Wenn das Ökosystem ein Format vorschreibt (Kubernetes in YAML, package.json in JSON), folgen Sie der Konvention. Ansonsten bevorzugen Sie YAML für lange und annotierte Konfigurationen, die Sie von Hand bearbeiten, und JSON für Konfigurationen, die von einem Programm generiert oder von Code konsumiert werden. Das Vorhandensein nützlicher Kommentare ist oft das ausschlaggebende Argument für YAML.
Wie behalte ich Kommentare bei einem Round-Trip YAML zu JSON zu YAML?
Das können Sie nicht. JSON unterstützt keine Kommentare: Sobald Sie YAML in JSON konvertieren, gehen die Kommentare endgültig verloren. Um Kommentare bei programmatischen Bearbeitungen zu bewahren, verwenden Sie einen Parser, der die Formatierung beibehält, wie ruamel.yaml in Python im Round-Trip-Modus, oder vermeiden Sie den Umweg über JSON vollständig.
Warum parst meine YAML-Datei lokal korrekt, scheitert aber in der Produktion?
Häufige Ursachen: unterschiedliche Parser-Versionen (YAML 1.1 vs. 1.2), durch einen Editor eingeführte Tabulatoren, nicht quotierte Werte, die wie Booleans (NO, off) oder Zahlen (01234) aussehen, Dateikodierung (UTF-8 BOM schlecht verarbeitet). Quotieren Sie mehrdeutige Zeichenketten systematisch und fixieren Sie die Parser-Version in Ihrem Projekt.
Ist JSON eine Teilmenge von YAML?
Seit YAML 1.2 ja, in der Praxis: Jedes gültige JSON-Dokument ist ein gültiges YAML-1.2-Dokument. Das Umgekehrte ist falsch: Ein YAML-Dokument, das Kommentare, Anchors, implizite Datumsangaben oder mehrere Dokumente in einer Datei verwendet, kann nicht direkt in JSON ohne Informationsverlust ausgedrückt werden.
Welche Alternativen zu JSON und YAML sollte man kennen?
TOML: beliebt für Konfigurationen (Cargo, pyproject.toml), guter Kompromiss zwischen Lesbarkeit und expliziter Typisierung. INI: sehr einfach, aber keine standardmäßige verschachtelte Struktur. XML: ausführlich, aber weiterhin relevant für SOAP und einige Legacy-Java-Konfigurationen. HCL: von Terraform verwendet. JSON5 und JSONC: JSON-Erweiterungen, die Kommentare und nachgestellte Kommas erlauben.
Was ist das Gewicht von YAML im Vergleich zu JSON?
Bei gleicher Struktur ist YAML in der Regel 15 bis 30 % kürzer in Bytes, dank des Fehlens von Anführungszeichen um Schlüssel und die meisten Zeichenketten sowie des Fehlens von Klammern. Auf dem Wire (HTTP-Transport) bleibt minifiziertes JSON vergleichbar, aber YAML bleibt in lesbarer Version kompakter. Für reine Parsing-Performance ist JSON mehrfach schneller, was seine Verwendung für API mit hohem Traffic rechtfertigt.
Beispielanfrage
curl -X POST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute \
-H "Content-Type: application/json" \
-d '{"json":"...","space_tabulation":1}'
Eingabeschema
| Feld | Typ | Erforderlich | Standard |
|---|---|---|---|
json |
text | ✓ | – |
space_tabulation |
integer | ✓ | – |
Endpunkte
GET https://cdrn.fr/api/v1/tools- listet alle verfügbaren Tools aufGET https://cdrn.fr/api/v1/tools/json-yaml-converter- liefert das Schema dieses ToolsPOST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute- führt dieses Tool mit einem JSON-Payload aus