Beide Richtungen, live im Browser, spec-konform
{{ error }}
JSON ist kompakter und überall verfügbar, eignet sich gut für APIs und Maschinen. YAML ist leichter zu lesen und zu schreiben (durch Einrückung und Kommentare) und wird bevorzugt für Konfigurationsdateien (Kubernetes, Docker Compose, Ansible, GitHub Actions). Beide repräsentieren dieselben Datentypen — verlustfreie Konvertierung ist also möglich (außer Kommentare gehen bei YAML→JSON verloren).
YAML hat überraschende Spezialfälle: `no` und `off` werden in YAML 1.1 als boolean false interpretiert (norwegisches Sprachkürzel verliert seine Bedeutung). `1.0` ist eine Zahl, `'1.0'` ein String. Zeit-Werte wie `12:00` werden zu Sekunden umgerechnet. Bei einfachen Konfigurationsdateien ist YAML angenehm, bei komplexen Strukturen mit vielen Sonderzeichen ist JSON sicherer.
JSON (RFC 8259 / ECMA-404) und YAML (YAML 1.2.2, yaml.org) sind syntaktisch sehr unterschiedlich, repräsentieren aber dasselbe Datenmodell: Skalare, Listen (Sequences) und assoziative Arrays (Mappings). YAML ist sogar ein Superset von JSON — jedes gültige JSON ist auch gültiges YAML. Das macht die Konvertierung in beide Richtungen mathematisch verlustfrei für Daten, mit einer wichtigen Ausnahme: Kommentare. YAML erlaubt #-Kommentare, JSON nicht. Beim Weg YAML → JSON gehen Kommentare verloren — bei Configs, die committed werden, sollten Sie die YAML-Quelle behalten.
Praktisch dominieren beide Formate unterschiedliche Bereiche: JSON ist die Lingua Franca für REST/GraphQL-APIs, Logs, Browser-LocalStorage und npm-package.json. YAML ist Standard in Kubernetes-Manifests, Docker Compose, Ansible-Playbooks, GitHub Actions, GitLab CI und MkDocs. Wenn Sie eine deployment.yaml in einem Helm-Chart programmatisch erzeugen, ist der Workflow oft: Daten in TypeScript/Python aufbauen, als JSON in den Build geben und am Schluss YAML produzieren — genau das macht unser Konverter im Browser mit js-yaml@4, einem spec-konformen Parser für YAML 1.2.
Ein entscheidender Punkt für saubere Configs: YAML 1.2.2 hat das berüchtigte "Norwegen-Problem" entschärft. In YAML 1.1 wurden no, NO, off, OFF, yes, on automatisch zu Booleans — der ISO-Code für Norwegisch (no) verlor seine Bedeutung. YAML 1.2 akzeptiert nur noch true und false als Booleans. Wer mit älteren Tools arbeitet (z.B. Ruby Psych 1.x oder Snake YAML 1.x), sollte solche Werte quoten: language: "no".
Die Konvertierung läuft live im Browser. Folgen Sie diesen Schritten:
:, ungequotete Werte mit Sonderzeichen wie : # @ &.Hier sind typische Konvertierungen, die in der Praxis vorkommen:
name: Anna\nage: 29 wird zu {"name":"Anna","age":29}. Beachten Sie, dass 29 automatisch als Zahl interpretiert wird.roles:\n - editor\n - author wird zu "roles":["editor","author"]. Die Inline-Form roles: [editor, author] liefert dasselbe.description: |\n Hello\n World bleibt als "Hello\nWorld" mit Newlines erhalten. Mit > würden Newlines zu Spaces umgewandelt.apiVersion: apps/v1, kind: Deployment und verschachteltem spec.template.spec.containers wird in eine wohlstrukturierte JSON-Struktur transformiert — ideal als API-Body für kubectl --raw.name: CI\non: [push]\njobs: ... wird zu {"name":"CI","on":["push"],"jobs":{...}}. Achtung: hier ist on in YAML 1.1 ein Boolean — js-yaml@4 (YAML 1.2) macht es korrekt zu einem String-Key.YAML ist mächtig, hat aber Tücken. Erstens: Indentation. YAML kennt nur Spaces, niemals Tabs für Einrückung. Mixed-Indentation oder ein einziger Tab in einem 200-Zeilen-File bricht den ganzen Parse. Setzen Sie Ihren Editor auf expandtab mit Width 2. Zweitens: Anker und Aliases. &name und *name erlauben Wiederverwendung von Strukturen — beim Export zu JSON werden Aliases expandiert (referenzgleiche Substrukturen werden zu zwei separaten Objekten kopiert), wodurch die JSON-Datei deutlich größer wird. Drittens und sicherheitskritisch — YAML-Code-Execution: Frühere YAML-Parser (PyYAML <5, SnakeYAML <2) erlaubten per !!python/object/apply oder !!javax.script.ScriptEngineManager-Tags Remote Code Execution. js-yaml@4 (im Browser) und safe_load (Python) verbieten Custom-Tags per Default — trotzdem sollten Sie YAML aus untrusted source niemals mit dem unsicheren load() parsen. Viertens: Norwegen-Problem. YAML 1.1 macht no → false. js-yaml@4 ist YAML 1.2 und behandelt es korrekt als String — Vorsicht aber, wenn die Konsumenten-Seite YAML 1.1 spricht (manche Cloud-CI-Systeme). Fünftens: Komment-Verlust. YAML → JSON wirft alle #-Kommentare weg. Behalten Sie die YAML-Quelle als Single Source of Truth, JSON nur als Maschinen-Format.
no, off, yes, on automatisch zu Booleans — der ISO-Sprachcode für Norwegisch (no) verlor seinen String-Charakter. YAML 1.2 (verwendet von js-yaml@4) hat das korrigiert. In älteren Parsern: language: "no" quoten.expandtab und Width 2, oder lassen Sie yamllint im CI laufen.safe_load, SnakeYAML 2.x) ja — diese ignorieren Custom-Tags wie !!python/object/apply. Mit alten Versionen war YAML-Parsing ein RCE-Vektor. Verwenden Sie niemals yaml.load() ohne explicit safe-Modus für untrusted Input."_comment":"…", JSONC im Konsumenten oder eine Build-Pipeline, die die YAML-Quelle behält und JSON nur als generiertes Artefakt deployt — der gängigste und cleanste Weg.navigator.clipboard-API genutzt — kein Server-Roundtrip.