Zum Inhalt springen

YAML

Der Unterschied zwischen YAML und JSON: Ein vollständiger Vergleich

5 min read

Der Unterschied zwischen YAML und JSON: Ein vollständiger Vergleich

Wenn Sie in der Softwareentwicklung, im Cloud-Engineering oder im DevOps-Bereich arbeiten, verbringen Sie einen erheblichen Teil Ihres Tages damit, Konfigurationsdateien zu lesen, zu schreiben und Fehler darin zu beheben. Im modernen Technologie-Stack dominieren zwei Datenserialisierungssprachen die Landschaft: JSON (JavaScript Object Notation) und YAML (YAML Ain't Markup Language).

Auf hohem Niveau erfüllen sie genau denselben Zweck: Es sind textbasierte Formate, die zur Darstellung strukturierter Daten verwendet werden, damit diese zwischen Servern übertragen, in Konfigurationsdateien gespeichert oder von Anwendungen gelesen werden können. Tatsächlich sind sie so eng miteinander verwandt, dass YAML eigentlich eine Obermenge (Superset) von JSON ist. (Jede gültige JSON-Datei ist technisch gesehen eine gültige YAML-Datei!)

Trotz ihrer Ähnlichkeiten haben Entwickler oft starke, leidenschaftliche Meinungen darüber, welches Format besser ist. Sie verfolgen völlig unterschiedliche Designphilosophien. JSON wurde entwickelt, um von Maschinen und Parsern leicht verarbeitet zu werden. YAML wurde entwickelt, um von Menschen leicht gelesen und geschrieben zu werden.

In diesem tiefgehenden Artikel werden wir die Geschichte beider Formate untersuchen, ihre Syntax Seite an Seite aufschlüsseln, ihre Stärken und Schwächen analysieren und Ihnen definitive Regeln geben, wann Sie welches Format verwenden sollten.

Eine kurze Geschichte

Der Aufstieg von JSON

In den frühen 2000er Jahren war XML (eXtensible Markup Language) der König des Datenaustauschs. XML ist unglaublich ausführlich; Daten sind in schwere <oeffnende> und </schliessende> Tags verpackt. Als AJAX (Asynchronous JavaScript and XML) populär wurde, erkannten Webentwickler, dass das Parsen schwerer XML-Dateien im Browser langsam und umständlich war.

Douglas Crockford popularisierte JSON um das Jahr 2001 herum. Da die Syntax von JSON identisch damit war, wie JavaScript Objekte definiert, konnten Browser es sofort parsen. Es war leichtgewichtig, von XMLs klobigen Tags befreit und stützte sich auf geschweifte Klammern {} und eckige Klammern []. Innerhalb weniger Jahre verdrängte JSON XML vollständig und wurde zum unangefochtenen Standard für Web-APIs.

Die Entwicklung von YAML

Während JSON großartig für Computer war, war es nicht großartig für Menschen, die Konfigurationsdateien schreiben. JSON ist streng (strict). Ein einziges fehlendes Anführungszeichen oder ein falsch platziertes Komma zerstört die gesamte Datei. Außerdem können Sie in JSON keine Kommentare schreiben, was die Verwendung für Konfigurationsdateien, bei denen oft Erklärungen erforderlich sind, frustrierend macht.

Hier kommt YAML ins Spiel (erstmals 2001 von Clark Evans vorgeschlagen). Die Schöpfer von YAML wollten ein Format, das die menschliche Lesbarkeit über alles andere stellt. Sie entfernten die geschweiften Klammern, die eckigen Klammern und die Anführungszeichen. Anstelle von Symbolen verwendet YAML Python-artige Einrückungen (Leerzeichen), um Struktur zu definieren. Sie fügten auch die Möglichkeit hinzu, Kommentare zu schreiben. Heute ist YAML der De-facto-Standard für DevOps-Tools wie Kubernetes, Docker Compose, Ansible und GitHub Actions.

Syntax-Vergleich: Seite an Seite

Lassen Sie uns genau dieselben Daten in beiden Formaten betrachten, um zu verstehen, wie sich ihre Syntax unterscheidet. Wir werden eine Serverkonfiguration definieren.

Der JSON-Ansatz

So sieht unsere Serverkonfiguration in JSON aus. Beachten Sie die strenge Verwendung von Anführungszeichen um alle Schlüssel, die Doppelpunkte, die Kommas zur Trennung von Elementen und die geschweiften Klammern zur Definition von Blöcken.

{
  "server": {
    "host": "127.0.0.1",
    "port": 8080,
    "environment": "production"
  },
  "database": {
    "type": "postgres",
    "enabled": true,
    "ports": [5432, 5433]
  },
  "users": [
    {
      "name": "Alice",
      "role": "admin"
    },
    {
      "name": "Bob",
      "role": "editor"
    }
  ]
}

JSON-Regeln:

  • Strings müssen in doppelte Anführungszeichen ("") gesetzt werden. Einfache Anführungszeichen sind ungültig.
  • Schlüssel (Keys) müssen in doppelte Anführungszeichen gesetzt werden.
  • Abschließende Kommas (trailing commas) sind nicht erlaubt (ein Komma nach dem letzten Element in einer Liste oder einem Objekt verursacht einen Fehler).
  • Kommentare (// oder /* */) sind durch die JSON-Spezifikation streng verboten.

Der YAML-Ansatz

Betrachten wir nun genau dieselben Daten in YAML. Beachten Sie, wie das visuelle Rauschen (Anführungszeichen, Kommas, Klammern) vollständig verschwunden ist.

# Dies ist unsere Produktionsserver-Konfiguration
server:
  host: 127.0.0.1
  port: 8080
  environment: production

database:
  type: postgres
  enabled: true
  ports:
    - 5432
    - 5433

users:
  - name: Alice
    role: admin
  - name: Bob
    role: editor

YAML-Regeln:

  • Die Struktur wird durch Einrückung definiert (Leerzeichen, keine Tabulatoren).
  • Listen werden durch einen Bindestrich (-) gekennzeichnet.
  • Strings benötigen keine Anführungszeichen (es sei denn, sie enthalten Sonderzeichen).
  • Kommentare werden mit dem Raute-Symbol (#) unterstützt.

Wichtige Unterschiede analysiert

1. Menschliche Lesbarkeit vs. Maschinelle Parsbarkeit

Dies ist die Kerntrennung. YAMLs Abhängigkeit von Einrückungen und das Fehlen von Symbolen machen es für das menschliche Auge unglaublich leicht zu überfliegen. Es sieht aus wie eine einfache Gliederung. Diese Einrückung macht es für Computer jedoch erheblich schwerer, YAML zu parsen. YAML-Parser sind langsamer und viel komplexer als JSON-Parser.

JSONs explizite Klammern und Kommas machen es für Menschen optisch unübersichtlich, aber Maschinen lieben es. Das Parsen von JSON ist rasend schnell und in fast jeder Programmiersprache der Welt nativ integriert.

2. Kommentare

Die Unfähigkeit, Kommentare zu JSON hinzuzufügen, ist sein größter Fehler bei der Verwendung für Konfigurationen. Wenn Sie eine komplexe settings.json-Datei schreiben, können Sie keine Notizen hinterlassen, die erklären, warum eine Einstellung auf eine bestimmte Weise konfiguriert ist. YAML unterstützt Kommentare nativ. Sie können jede Zeile eines Kubernetes-Deployments oder einer CI/CD-Pipeline dokumentieren, was für die Zusammenarbeit im Team unerlässlich ist.

3. Erweiterte Funktionen

JSON ist absichtlich "dumm". Es unterstützt grundlegende Datentypen: Strings, Zahlen, Booleans, Arrays, Objekte und Null. Das ist alles. YAML ist überraschend komplex. Zusätzlich zu den Grundtypen unterstützt YAML:

  • Anker und Aliase (Anchors & Aliases) (& und *): Sie können einen Datenblock einmal definieren und ihn an anderer Stelle im Dokument wiederverwenden (DRY - Don't Repeat Yourself).
  • Mehrzeilige Strings (Multi-line Strings): YAML bietet eine hervorragende Unterstützung für mehrzeilige Textzeichenfolgen (mit | oder >), wodurch es sich hervorragend zum Einbetten von Shell-Skripten oder Zertifikaten eignet.
  • Explizite Typisierung: Sie können mithilfe von Tags erzwingen, dass ein Wert ein bestimmter Datentyp ist (z. B. !!float 123).

4. Die Einrückungsfalle (Indentation Trap)

YAMLs größte Schwäche ist genau das, was es schön macht: Leerzeichen. Da die Struktur auf Einrückung beruht, kann ein einziges falsch platziertes Leerzeichen die gesamte Hierarchie Ihrer Daten verändern. Wenn Sie versehentlich ein Tabulatorzeichen anstelle von Leerzeichen verwenden, geht die YAML-Datei kaputt. Das Debuggen einer 1.000-zeiligen YAML-Datei mit einem Einrückungsfehler ist ein berüchtigter DevOps-Albtraum.

Wann man JSON verwenden sollte

  1. APIs und Netzwerkverkehr: JSON ist der unangefochtene König der APIs. Wenn Ihr Frontend mit Ihrem Backend spricht, verwenden Sie JSON. Es ist kleiner bei der Übertragung und wird im Browser unendlich viel schneller geparst.
  2. Datenspeicherung und Protokollierung (Logging): Verwenden Sie JSON, wenn Sie Dokumente in NoSQL-Datenbanken (wie MongoDB) speichern oder strukturierte Anwendungsprotokolle (wie Elasticsearch) schreiben. Maschinen lesen diese Daten, keine Menschen.
  3. Sprachübergreifende Interoperabilität: Da JSON so einfach ist, können Sie garantieren, dass jede Sprache, jedes Framework oder jedes Tool es genau auf die gleiche Weise parst.

Wann man YAML verwenden sollte

  1. Konfigurationsdateien: Wenn ein Mensch die Datei öffnen, lesen und regelmäßig manuell bearbeiten muss, verwenden Sie YAML.
  2. Infrastructure as Code (IaC) / DevOps: Kubernetes-Manifeste, Docker Compose-Dateien, Ansible-Playbooks und CI/CD-Pipelines (GitHub Actions, GitLab CI) verlassen sich alle auf YAML. Die Möglichkeit, Kommentare und mehrzeilige Zeichenfolgen zu verwenden, ist hier entscheidend.
  3. Komplexe, sich wiederholende Konfigurationen: Wenn Sie eine riesige Konfigurationsdatei haben, in der sich dieselben Blöcke wiederholen, können Ihnen die Anchor- und Alias-Funktionen von YAML Hunderte von Codezeilen ersparen.

Fazit

Die Debatte zwischen YAML und JSON dreht sich nicht darum, welches Format technisch überlegen ist; es geht um den Kontext.

JSON ist für Maschinen. Es ist streng, eindeutig, ohne eigene Meinung und rasend schnell zu verarbeiten. Es ist die Sprache des Nervensystems des Internets, die Daten lautlos zwischen Servern und Browsern transportiert.

YAML ist für Menschen. Es ist ausdrucksstark, lesbar und verzeiht fehlende Anführungszeichen und Kommas. Es ermöglicht Entwicklern, Absichten durch Kommentare zu kommunizieren und sauberere Konfigurationsdateien zu schreiben.

Indem Sie die Stärken beider Formate verstehen, können Sie aufhören, gegen die Formate anzukämpfen, und anfangen, das richtige Tool für die richtige Aufgabe zu verwenden. Verwenden Sie JSON, wenn Code mit Code spricht, und verwenden Sie YAML, wenn Menschen mit Code sprechen.

Buy me a coffee