YamlBox

Leitartikel · 6 Min. Lektüre

YAML vs. JSON: wann was zu verwenden ist

YAML vs JSON ist eine Wahl zwischen zwei Serialisierungsformaten, die auf derselben Grundidee basieren: Verschachtelung von Schlüssel-Wert-Paaren und Listen. Die Unterschiede, die in der Praxis von Bedeutung sind, bestehen darin, wer die Datei liest: Mensch oder Maschine.

Aktualisiert

YAML vs JSON: die Kurzversion

JSON ist ein Datenaustauschformat: streng, eindeutig und jede Sprache kann es nativ analysieren. YAML ist ein Konfigurationsformat: Es akzeptiert Kommentare und mehrzeilige Zeichenfolgen und ist für die Bearbeitung durch Personen in Pull-Anfragen konzipiert. Verwenden Sie JSON auf dem Draht, YAML in Dateien, die von Menschen verwaltet werden – und konvertieren Sie zwischen ihnen, wenn eine Grenze dies erfordert.

Was eigentlich anders ist

Kommentare

YAML hat Kommentare; JSON nicht. In Konfigurationsdateien ist dies entscheidend – der Grund, warum Sie wissen, warum ein Timeout auf 3000 gesetzt ist, ist normalerweise der Kommentar darüber. Wenn Sie YAML in JSON konvertieren, werden die Kommentare gelöscht, weshalb JSON oft als Build-Artefakt und nicht als Quelle der Wahrheit behandelt wird.

Syntax und Rauschen

                # YAML
service:
  name: checkout
  replicas: 3
  ports: [8080, 9090]

// JSON — same data
{
  "service": {
    "name": "checkout",
    "replicas": 3,
    "ports": [8080, 9090]
  }
}
              

YAML entfernt Klammern, Anführungszeichen und Kommas im Austausch für Einrückungssensitivität. Das ist der Handel, den jeder YAML-Benutzer kennt: weniger Zeichen, mehr Möglichkeiten, Leerzeichen auf subtile Weise falsch darzustellen.

Typen und Fallen

  • JSON hat einen numerischen Typ; YAML unterscheidet Ints, Floats und mehr – und YAML 1.1 analysiert bekanntermaßen den Ländercode NO als den booleschen Wert false und 1.10 als eine Zahl, die ihre nachgestellte Null verliert, sofern sie nicht in Anführungszeichen gesetzt wird.
  • YAML unterstützt Anker und Aliase (&defaults / *defaults) zur Wiederverwendung; JSON hat kein Äquivalent, daher müssen gemeinsam genutzte Blöcke dupliziert oder generiert werden.
  • YAML unterstützt Dateien mit mehreren Dokumenten (---Trennzeichen); JSON ist ein Dokument pro Datei. Konverter wandeln Dokumente normalerweise in ein Array um.
  • JSON erfordert Schlüssel und Zeichenfolgen in doppelten Anführungszeichen; YAML setzt nur bei Bedarf Anführungszeichen, was bedeutet, dass eine unvorsichtige Zeichenfolge stillschweigend in eine Zahl oder einen booleschen Wert umgewandelt werden kann.

Wo jedes Format gewinnt

  • APIs und Drahtformate: JSON. Universelle Parser, vorhersehbare Mehrdeutigkeit, Streaming-freundlich (JSON Zeilen).
  • Kubernetes, CI/CD, Docker Compose, Ansible, Helm: YAML, da diese Ökosysteme darauf standardisiert sind und Kommentare unterstützen.
  • Anbieterkonfiguration, die Sie programmgesteuert generieren: JSON – Algorithmen erzeugen sie ohne Angst vor Einrückungen.
  • Dokumente, die ein Junior-Teamkollege von Hand bearbeiten wird: YAML, mit Kommentaren, die das Warum erklären.

Sicher konvertieren

  1. Kennen Sie Ihre Dateien mit mehreren Dokumenten. Ein durch --- getrennter k8s-Manifestsatz muss ein JSON-Array werden, nicht nur das erste Dokument. Verwenden Sie einen Konverter, der meldet, wie viele Dokumente gefunden wurden.
  2. Geben Sie die Zahlen an, die als Bezeichner dienen. „1.10“ ist eine Version; 1.10 ist ein Float. Aktivieren Sie erzwungene Anführungszeichen beim Konvertieren in YAML, wenn es sich bei den Werten um Zeichenfolgen handelt, die numerisch aussehen.
  3. Beobachten Sie, wie Kommentare verschwinden. Die Konvertierung in JSON ist per Definition verlustbehaftet; Wenn Kommentare wichtig sind, behalten Sie YAML als Quelle bei und generieren Sie JSON nur zur Erstellungszeit.
  4. Validieren Sie mit präzisen Fehlern. Einrückungsfehler führen in einigen Tools zu irreführenden Meldungen. Stellen Sie sicher, dass bei Ihnen Zeile und Spalte angezeigt werden.

Probieren Sie es aus: Fügen Sie beliebige YAML in den YAML-zu-JSON-Konverter ein – Unterstützung für mehrere Dokumente und präzise Fehlerzeilen sind integriert, und es wird nichts hochgeladen.

Häufige Fragen

Ist YAML eine Obermenge von JSON?

YAML 1.2 ist als Obermenge konzipiert – gültig JSON ist normalerweise gültig YAML. Aber YAML 1.1 (immer noch erhältlich) unterscheidet sich in einigen Randfällen, und Tabulatoren, doppelte Schlüssel und bestimmte Zeichenfolgen werden von Engine zu Engine unterschiedlich analysiert. Betrachten Sie „es ist technisch gültig YAML“ als eine lustige Tatsache und nicht als Migrationsstrategie.

Was ist schneller zu analysieren?

JSON-Parser sind im Allgemeinen schneller und einfacher, da die Grammatik kleiner ist; Natives JSON-Parsing ist in jeder Laufzeit vorhanden. Für Konfigurationsdateien ist der Unterschied irrelevant – Sie analysieren sie einmal beim Start.