Was ist der Unterschied zwischen YAML und JSON?


735

Was sind die Unterschiede zwischen YAML und JSON, insbesondere unter Berücksichtigung der folgenden Punkte?

  • Leistung (Kodierungs- / Dekodierungszeit)
  • Speicherverbrauch
  • Klarheit des Ausdrucks
  • Bibliotheksverfügbarkeit, Benutzerfreundlichkeit (ich bevorzuge C)

Ich hatte vor, eine dieser beiden in unserem eingebetteten System zum Speichern von Konfigurationsdateien zu verwenden.

Verbunden:

Sollte ich YAML oder JSON verwenden, um meine Perl-Daten zu speichern?


26
Beachten Sie, dass JSON als Teilmenge von YAML betrachtet werden kann: en.wikipedia.org/wiki/JSON#YAML
Charles

2
@ Charles, ja, aber sie haben einen subtilen Unterschied: ajaxian.com/archives/json-yaml-its-getting-closer-to-truth
pierrotlefou

1
Da YAML (ungefähr) eine Obermenge von JSON ist, kann die Frage der Leistung nicht ohne die Annahme beantwortet werden, ob Sie diese Ausdruckskraft verwenden werden. Wenn Sie es nicht brauchen: Wie schnell können YAML-Parser JSON lesen? Wenn Sie es brauchen: Wie viel langsamer sind JSON-Parser, wenn Sie eine möglicherweise längere JSON-Darstellung derselben Idee zulassen?
Poolie

@jokoon Ich denke "Ich würde eine C-Bibliothek bevorzugen" (zB libyaml)
dbr

4
YAML-Dokumente können komplex und schwer lesbar sein. Ein "Milliarden Lachen" -Angriff ist mit YAML möglich. Andererseits können komplexe Objekte, Diagramme und andere Strukturen in YAML effizient serialisiert werden. Für Austauschformate und einfache Strukturen wird JSON bevorzugt. Für die Serialisierung komplexer Objekte oder für Grammatikdefinitionen kann YAML bevorzugt sein.
Erik Aronesty

Antworten:


656

Technisch gesehen ist YAML eine Obermenge von JSON. Dies bedeutet, dass zumindest theoretisch ein YAML-Parser JSON verstehen kann, aber nicht unbedingt umgekehrt.

Siehe die offiziellen Spezifikationen im Abschnitt "YAML: Beziehung zu JSON" .

Im Allgemeinen gibt es bestimmte Dinge, die ich an YAML mag und die in JSON nicht verfügbar sind.

  • Wie @jdupont hervorhob, ist YAML visuell einfacher zu betrachten. Tatsächlich ist die YAML-Homepage selbst eine gültige YAML, aber für einen Menschen ist sie leicht zu lesen.
  • YAML kann mithilfe von "Ankern" auf andere Elemente in einer YAML-Datei verweisen. Somit kann es relationale Informationen verarbeiten, wie sie in einer MySQL-Datenbank zu finden sind.
  • YAML ist robuster beim Einbetten anderer Serialisierungsformate wie JSON oder XML in eine YAML-Datei.

In der Praxis wird wahrscheinlich keiner dieser beiden letzten Punkte für die Dinge von Bedeutung sein, die Sie oder ich tun, aber auf lange Sicht denke ich, dass YAML ein robusteres und praktikableres Format für die Serialisierung von Daten sein wird.

Derzeit verwenden AJAX und andere Webtechnologien in der Regel JSON. YAML wird derzeit häufiger für Offline-Datenprozesse verwendet. Beispielsweise ist es standardmäßig im C-basierten OpenCV-Computer-Vision-Paket enthalten, JSON hingegen nicht.

Sie finden C-Bibliotheken für JSON und YAML. Die Bibliotheken von YAML sind in der Regel neuer, aber ich hatte in der Vergangenheit keine Probleme damit. Siehe zum Beispiel Yaml-cpp .


199
json ist keine Teilmenge (obwohl es nahe ist), und die Inkompatibilitäten machen wütend, wenn Sie sie entdecken. JSON-Bibliotheken sind im Allgemeinen schneller ... ( stackoverflow.com/questions/2451732/… ). Yaml-Befürworter werden darauf bestehen, dass es sich um eine Teilmenge handelt. Wenn die Lesbarkeit ein Problem darstellt, verwenden Sie yaml. Wenn Interoperabilität und Geschwindigkeit ein Problem darstellen, verwenden Sie JSON.
Erik Aronesty

6
YAML ist eine Obermenge einer bestimmten Form der JSON-Syntax. Das heißt, wenn Sie JSON auf eine Weise verwenden, die mit YAML kompatibel ist, handelt es sich um eine geeignete Teilmenge. Wie pierr oben kommentiert hat, sind die Spezifikationen [auf Kompatibilität ausgerichtet] (ajaxian.com/archives/json-yaml-its-getting-closer-to-truth).
Naught101

120
Auch YAML unterstützt Kommentare, was praktisch ist.
Den

59
@ErikAronesty JSON befand sich in der Nähe einer Teilmenge von YAML 1.1, aber seit YAML 1.2 ist es jetzt eine echte Teilmenge. YAML 1.2 wurde hauptsächlich veröffentlicht, um die letzten Inkompatibilitäten zwischen den beiden Spezifikationen auszubügeln.
00prometheus

64
Aus der YAML 1.2-Spezifikation : "Das Hauptziel dieser Überarbeitung besteht darin, YAML als offizielle Teilmenge mit JSON in Einklang zu bringen."
Rich C

204

Unterschiede:

  1. YAML kann je nach Verwendung besser lesbar sein als JSON
  2. JSON ist oft schneller und wahrscheinlich immer noch mit mehr Systemen kompatibel
  3. Es ist möglich, sehr schnell einen "gut genug" JSON-Parser zu schreiben
  4. Doppelte Schlüssel, die möglicherweise gültige JSON- Schlüssel sind , sind definitiv ungültige YAML.
  5. YAML bietet eine Vielzahl von Funktionen, darunter Kommentare und relationale Anker. Die YAML-Syntax ist dementsprechend recht komplex und kann schwer zu verstehen sein.
  6. Es ist möglich, rekursive Strukturen in yaml: zu schreiben {a: &b [*b]}, die in einigen Konvertern unendlich schleifen. Auch bei kreisförmiger Erkennung ist eine "Yaml-Bombe" noch möglich (siehe XML-Bombe ).
  7. Da es keine Referenzen gibt, ist es unmöglich, komplexe Strukturen mit Objektreferenzen in JSON zu serialisieren. Die YAML-Serialisierung kann daher effizienter sein.
  8. In einigen Codierungsumgebungen kann die Verwendung von YAML es einem Angreifer ermöglichen , beliebigen Code auszuführen .

Beobachtungen:

  1. Python-Programmierer sind im Allgemeinen große Fans von YAML, da für die Angabe von Ebenen eher Einrückungen als Syntax in Klammern verwendet werden.
  2. Viele Programmierer halten das Anhängen von "Bedeutung" an Einrückungen für eine schlechte Wahl.
  3. Wenn das Datenformat die Umgebung einer Anwendung verlässt, in einer Benutzeroberfläche analysiert oder in einer Messaging-Schicht gesendet wird, ist JSON möglicherweise die bessere Wahl.
  4. YAML kann direkt für komplexe Aufgaben wie Grammatikdefinitionen verwendet werden und ist häufig die bessere Wahl als die Erfindung einer neuen Sprache.

9
Es ist. Der gesamte Zweck von Yaml 1.2 bestand darin, die wenigen Kompatibilitätsunterschiede zu beheben, um JSON zu einer strengen Teilmenge zu machen. Wenn Sie der Meinung sind, dass die Spezifikation ihren Zweck nicht erfüllt hat, Erik, verweisen Sie bitte auf ein Beispiel für einen gültigen JSON, der gegen die YAML-Spezifikation verstößt und / oder einen verifizierten 1.2-kompatiblen YAML-Parser beschädigt.
SFEley

32
@SFEley Die YAML-Spezifikation besagt, dass es möglicherweise gültige JSON-Dateien gibt, die eine ungültige YAML wären. Aber es ist nicht in der Praxis wahrscheinlich. "JSONs RFC4627 erfordert, dass Zuordnungsschlüssel lediglich" SOLLTEN "eindeutig sein sollten, während YAML darauf besteht, dass sie" MÜSSEN ". Technisch gesehen entspricht YAML daher der JSON-Spezifikation und behandelt Duplikate als Fehler. In der Praxis, da JSON keine Angaben macht Aufgrund der Semantik solcher Duplikate sind die einzigen portablen JSON-Dateien solche mit eindeutigen Schlüsseln, die daher gültige YAML-Dateien sind. " - yaml.org/spec/1.2/spec.html#id2759572
David C. Bishop

9
Kommentar zur Verwendung von Einrückungen; Nun, ich glaube, das könnte gewöhnungsbedürftig sein und nicht jeder würde es mögen. Zum Beispiel bin ich ein .NET-Typ. Ich habe mir eine travis.yml-Datei angesehen und mich gefragt, warum es ein Problem gibt. Ich fand heraus, dass ich einen Tab hatte, wo es nicht sein sollte. Nicht jeder ist es gewohnt, Dinge aufgrund von Leerzeichen / Tabulatoren / neuen Zeilen in die Luft zu jagen.
Phil

10
Tabulatoren sind als Einrückungszeichen einfach überhaupt nicht zulässig. IMHO, das ist ein guter Codierungsstil in allen Sprachen - mit oder ohne syntaktische Einrückung.
00prometheus

6
@Wyrmwood Ich persönlich mag Python und YAML und benutze sie buchstäblich jeden Tag. Ich neige dazu, YAML für Dinge zu verwenden, die die Leute oft bearbeiten müssen, und JSON für Dinge, die die Leute "möglicherweise" ansehen müssen. Ich wurde von C ++ - Entwicklern kritisiert, die Einrückungen als verwirrend empfinden ... insbesondere, wenn es mehrere Ebenen oder längere Funktionsblöcke gibt. Natürlich ... guter testbarer Code hat diese Dinge nicht, daher ist dies normalerweise kein Problem. Dies ist meine persönliche Beobachtung, aber jede gelegentliche Google-Suche liefert viele Ergebnisse. Daher ist es trivial, dies zu überprüfen.
Erik Aronesty

89

Esoterische Theorie umgehen

Dies beantwortet den Titel, nicht die Details, da die meisten nur den Titel aus einem Suchergebnis bei Google wie mir lesen, sodass ich der Meinung war, dass dies aus Sicht der Webentwickler notwendig ist .

  1. YAML verwendet Leerzeicheneinrückungen, die für Python-Entwickler ein vertrautes Gebiet sind.
  2. JavaScript-Entwickler lieben JSON, da es eine Teilmenge von JavaScript ist und direkt in JavaScript interpretiert und geschrieben werden kann. Außerdem kann JSON in Kurzform deklariert werden. Bei Verwendung typischer Variablennamen ohne Leerzeichen sind keine doppelten Anführungszeichen in Schlüsseln erforderlich.
  3. Es gibt eine Vielzahl von Parsern, die sowohl für YAML als auch für JSON in allen Sprachen sehr gut funktionieren.
  4. Das Space-Format von YAML kann in vielen Fällen viel einfacher zu betrachten sein, da die Formatierung einen besser lesbaren Ansatz erfordert.
  5. Das Formular von YAML ist zwar kompakter und einfacher zu betrachten, kann jedoch täuschend schwer von Hand zu bearbeiten sein, wenn in Ihrem Editor keine Leerzeichenformatierung sichtbar ist. Tabulatoren sind keine Leerzeichen, was weitere Verwirrung stiftet, wenn Sie keinen Editor haben, um Ihre Tastenanschläge in Leerzeichen zu interpretieren.
  6. JSON lässt sich viel schneller serialisieren und deserialisieren, da deutlich weniger Funktionen als bei YAML zu prüfen sind, sodass kleinerer und leichter Code JSON verarbeiten kann.
  7. Ein häufiges Missverständnis ist, dass YAML weniger Interpunktion benötigt und kompakter als JSON ist, aber dies ist völlig falsch. Whitespace ist unsichtbar, so dass es den Anschein hat, als gäbe es weniger Zeichen. Wenn Sie jedoch das tatsächliche Whitespace zählen, das erforderlich ist, damit YAML zusammen mit der richtigen Einrückung richtig interpretiert wird, werden Sie feststellen, dass YAML tatsächlich mehr Zeichen als JSON benötigt. JSON verwendet kein Leerzeichen, um Hierarchie oder Gruppierung darzustellen, und kann leicht reduziert werden, wenn unnötiges Leerzeichen für einen kompakteren Transport entfernt wird.

Der Elefant im Raum: Das Internet selbst

JavaScript dominiert das Web so deutlich mit einem großen Vorsprung, und JavaScript-Entwickler bevorzugen die Verwendung von JSON als Datenformat überwiegend zusammen mit gängigen Web-APIs, sodass es schwierig wird, YAML über JSON zu streiten, wenn Sie Webprogrammierung im allgemeinen Sinne durchführen, da Sie wahrscheinlich überstimmt werden in einer Teamumgebung. Tatsächlich weiß die Mehrheit der Webprogrammierer nicht einmal, dass YAML existiert, geschweige denn, es in Betracht zu ziehen.

Wenn Sie eine Webprogrammierung durchführen, ist JSON die Standardmethode, da bei der Arbeit mit JavaScript kein Übersetzungsschritt erforderlich ist. In diesem Fall müssen Sie ein besseres Argument für die Verwendung von YAML über JSON finden.


10
Ich bin nicht der Meinung, dass Python-Entwickler YAML bevorzugen. Pythons Diktat ist im Grunde JSON, die Liste der Diktate ist im Grunde auch JSON. Python hat json lib eingebaut. Nebenbei bemerkt, ich bin ein Python-Entwickler und ich bevorzuge JSON (die meisten Python-Entwickler, die ich kenne, bevorzugen JSON).
Karantan

6
Das einzige, was mich am Leerraum wirklich stört, ist, wie leicht es ist, verwirrt zu sein und etwas falsch zu machen, da ein Einrücken oder Nichteinrücken bedeuten könnte, dass es verschachtelt ist oder sich auf derselben Ebene befindet, und dass es auch sehr leicht ist, Fehler zu machen, wenn Sie dies nicht tun habe eine Leitregel. Es ist wie bei den versteckten Hoppla. Dies ist wirklich kein so einfaches Szenario, das niemand beim Bearbeiten von Yaml sagt. hatte nie dieses Problem mit json.
Jason Sebring

6
@ JasonSebring. Sie würden sich fast fragen, warum YAML mit Leerzeichen ging. Mein erstes "Bad im Ozean" von YAML führte zu einer kaputten App ... alles wegen Leerzeichen. Sie hätten gedacht, dass die Verwendung einer Einrückung ohne nicht druckbare Zeichen viel sinnvoller gewesen wäre! (Das heißt, warum um alles in der Welt haben sie nicht '.' Statt '' gewählt?) Um YAML zu verstehen, müssen Sie zu den Spezifikationen gehen. Um JSON zu verstehen, braucht man das nicht. (Ich war im ersteren und nie im letzteren). Dies deutet für mich auf ein Format hin, das nicht wirklich für Menschen lesbar ist
cmroanirgo

7
@ cmroanirgo yah das war meine Erfahrung. Mein Chef hat uns gezwungen, YAML über JSON zu verwenden, und es machte die Dinge unnötig beschissen, sie zu bearbeiten und aufzunehmen. Ich schrieb dies, weil ich hoffte, dass Stimmen mich rechtfertigen würden.
Jason Sebring

3
Probleme mit Registerkarten in YAML bedeuten, dass (a) die Fehlermeldung nicht gelesen wird und (b) ein Editor vorhanden ist, der keine Registerkarten hervorhebt. Beide Probleme sind leicht zu beheben, daher verstehe ich die Beschwerden nicht.
Werkzeugschmied

38

Diese Frage ist 6 Jahre alt, aber seltsamerweise spricht keine der Antworten wirklich alle vier Punkte an (Geschwindigkeit, Gedächtnis, Ausdruckskraft, Portabilität).

Geschwindigkeit

Dies ist natürlich implementierungsabhängig, aber da JSON so weit verbreitet und einfach zu implementieren ist, wird es tendenziell nativer unterstützt und daher schneller. Wenn man bedenkt, dass YAML alles tut, was JSON tut, plus eine LKW-Ladung mehr, ist es wahrscheinlich, dass von vergleichbaren Implementierungen von beiden die JSON-Implementierung schneller sein wird.

Da eine YAML-Datei jedoch geringfügig kleiner sein kann als ihr JSON-Gegenstück (aufgrund von weniger "und ,Zeichen), ist dies möglich dass ein hochoptimierter YAML-Parser unter außergewöhnlichen Umständen schneller ist.

Erinnerung

Grundsätzlich gilt das gleiche Argument. Es ist schwer zu verstehen, warum ein YAML-Parser jemals speichereffizienter sein würde als ein JSON-Parser, wenn er dieselbe Datenstruktur darstellt.

Ausdruckskraft

Wie von anderen angemerkt, bevorzugen Python-Programmierer YAML, JavaScript-Programmierer JSON. Ich werde diese Beobachtungen machen:

  • Es ist einfach, sich die gesamte Syntax von JSON zu merken und daher sehr sicher zu sein, die Bedeutung einer JSON-Datei zu verstehen. YAML ist für keinen Menschen wirklich verständlich. Die Anzahl der Feinheiten und Randfälle ist extrem.
  • Da nur wenige Parser die gesamte Spezifikation implementieren, ist es noch schwieriger, die Bedeutung eines bestimmten Ausdrucks in einem bestimmten Kontext zu bestimmen.
  • Das Fehlen von Kommentaren in JSON ist in der Praxis ein echtes Problem.

Portabilität

Eine moderne Sprache ohne eine JSON-Bibliothek ist kaum vorstellbar. Es ist auch schwer vorstellbar, dass ein JSON-Parser weniger als die vollständige Spezifikation implementiert. YAML hat weit verbreitete Unterstützung, ist jedoch weniger allgegenwärtig als JSON, und jeder Parser implementiert eine andere Teilmenge. Daher sind YAML-Dateien weniger interoperabel als Sie vielleicht denken.

Zusammenfassung

JSON ist der Gewinner für Leistung (falls relevant) und Interoperabilität. YAML ist besser für von Menschen gepflegte Dateien. HJSON ist ein anständiger Kompromiss, wenn auch mit stark eingeschränkter Portabilität. JSON5 ist ein vernünftigerer Kompromiss mit genau definierter Syntax.


3
Ich dachte tatsächlich, YAML sei kleiner wegen unsichtbarer Charaktere, die mich als solche täuschten. Unsichtbar => Nicht da, eigentlich auch nicht. Wenn Sie die unsichtbaren Zeichen zählen, die vorhanden sein müssen, insbesondere wenn YAML eine größere Verschachtelung erhält, übertrifft es JSON schnell. Ich fand das nur sehr interessant, da der von Menschen lesbare Teil die meisten von uns in diese Vorstellung hinein täuscht, bis ich wirklich darüber nachdachte, da Sie JSON und YAML nicht so sehr reduzieren können. Ich fand es auch sehr schwierig, YAML von Hand zu bearbeiten, nicht zu lesen, sondern nur zu bearbeiten, da die Editor-Anleitungen aktiviert sein müssen, und verschachtelte Elemente manchmal leicht zu verwechseln.
Jason Sebring

1
Ich bin der Meinung, dass in keiner der Antworten hier ausdrücklich Folgendes angegeben ist: "Für Einstellungen / Konfigurationsdateien ist YAML besser (aus den oben von allen genannten Gründen). Verwenden Sie für Maschinen / Maschinen-Interop JSON." Mit anderen Worten: Wenn Ihre Zielgruppe ein Mensch ist, ist YAML besser. Wenn das Ziel ein anderes Programm ist (Sie möchten jedoch, dass die Daten für Menschen lesbar sind), verwenden Sie JSON.
Florin T.

Das stimmt, aber die Frage legte einige ziemlich spezifische Parameter dar, wie sie die beiden vergleichen wollten. Persönlich würde ich YAML niemals für irgendetwas verwenden. Ich würde entweder JSON für die Interoperabilität verwenden oder JSON6, wenn die Wartung durch den Menschen wichtig ist.
Steve Bennett

29

GIT und YAML

Die anderen Antworten sind gut. Lesen Sie diese zuerst. Aber ich werde noch einen weiteren Grund hinzufügen, YAML manchmal zu verwenden: git .

In vielen Programmierprojekten werden zunehmend Git-Repositories für die Verteilung und Archivierung verwendet. Während im Verlauf eines Git-Repos JSON- und YAML-Dateien gleichermaßen gespeichert werden können, ist die "diff" -Methode zum Verfolgen und Anzeigen von Änderungen an einer Datei zeilenorientiert. Da YAML gezwungen ist, zeilenorientiert zu sein, sind kleine Änderungen in einer YAML-Datei für einen Menschen leichter zu erkennen.

Es ist natürlich richtig, dass JSON-Dateien "hübsch gemacht" werden können, indem die Zeichenfolgen / Schlüssel sortiert und Einrückungen hinzugefügt werden. Aber das ist nicht die Standardeinstellung und ich bin faul.

Persönlich verwende ich JSON im Allgemeinen für die Interaktion von System zu System. Ich verwende YAML oft für Konfigurationsdateien, statische Dateien und verfolgte Dateien. (Ich vermeide es im Allgemeinen auch, relationale YAML-Anker hinzuzufügen. Das Leben ist zu kurz, um Schleifen aufzuspüren.)

Auch wenn Geschwindigkeit und Platz wirklich ein Problem sind, benutze ich auch nicht. Vielleicht möchten Sie sich BSON ansehen.


22

Ich finde, YAML ist augenschonender: weniger Klammern, "" usw. Obwohl YAML Tabs stört ... aber man bekommt den Dreh raus.

In Bezug auf Leistung / Ressourcen würde ich keine großen Unterschiede zwischen den beiden erwarten.

Außerdem sprechen wir über Konfigurationsdateien und daher würde ich keine hohe Häufigkeit von Codierungs- / Decodierungsaktivitäten erwarten, nicht wahr?


22
Ich habe mich gefragt, was Sie mit dem Ärger über Tabs gemeint haben . Ich glaube, Tab-Zeichen sind in yaml nicht erlaubt , was ich persönlich für eine gute Idee in jeder Quelldatei halte .
Poolie

6
@poolie: jldupont bezieht sich wahrscheinlich auf das syntaktisch signifikante führende Leerzeichen in YAML.
Naught101

10
OK, aber sie sind keine Registerkarten.
Poolie

20

Wenn Sie keine Funktionen benötigen, die YAML und JSON nicht haben, würde ich JSON bevorzugen, da es sehr einfach ist und weitgehend unterstützt wird (viele Bibliotheken in vielen Sprachen). YAML ist komplexer und hat weniger Unterstützung. Ich denke nicht, dass die Analysegeschwindigkeit oder die Speichernutzung sehr unterschiedlich sein werden und möglicherweise keinen großen Teil der Leistung Ihres Programms ausmachen.


3
Inwiefern ist YAML komplexer?
Accatyyc

18
Zum Beispiel unterstützt YAML Anker, wie in einer anderen Antwort erwähnt wurde. Es gibt andere Funktionen, z. B. erweiterbare Datentypen. Dies macht das Parsen komplexer und erklärt, warum YAML größere Spezifikationen hat. Abhängig von der Parser-Implementierung kann die Leistung beeinträchtigt werden (siehe folgende Frage: stackoverflow.com/questions/2451732/… ).
Anton Strogonoff

5
Komplexität ist besser als Einfachheit, wenn diese Komplexität Ihnen die Kraft verschafft, insgesamt eine größere Einfachheit zu erreichen. Dies gilt sicherlich abhängig von der Komplexität Ihres Datenmodells.
Jonathan Neufeld

3
Ich bin hier vielleicht etwas spät dran, aber YAML kann Kommentare hinzufügen, JSON nicht. Für mich ist es eine große Hilfe, wenn es um die Dokumentation von Spezifikationen geht
Moses Liao GZ

@Accatyyc. Ich denke, die Tatsache, dass die Leute hier Fragen über den Unterschied stellen, ist ein sicheres Zeichen, dass YAML gar nicht so einfach ist. Ich habe noch nie eine Frage zu JSON gestellt (außer "Warum kann ich keine Kommentare darin haben?")
cmroanirgo

15

Technisch gesehen bietet YAML viel mehr als JSON (YAML v1.2 ist eine Obermenge von JSON):

  • Bemerkungen
  • Anker und Vererbung - Beispiel für 3 identische Gegenstände:

    item1: &anchor_name
      name: Test
      title: Test title
    item2: *anchor_name
    item3:
      <<: *anchor_name
      # You may add extra stuff.
  • ...

In den meisten Fällen werden diese zusätzlichen Funktionen nicht verwendet. Der Hauptunterschied besteht darin, dass YAML Einrückungen verwendet, während JSON Klammern verwendet . Dies macht YAML prägnanter und lesbarer (für das geschulte Auge).

Welches soll ich wählen?

  • YAML- Zusatzfunktionen und eine präzise Notation machen es zu einer guten Wahl für Konfigurationsdateien (nicht vom Benutzer bereitgestellte Dateien).
  • Die eingeschränkten JSON- Funktionen, die umfassende Unterstützung und das schnellere Parsen machen es zu einer hervorragenden Wahl für Interoperabilität und vom Benutzer bereitgestellte Daten .

4

Da diese Frage jetzt bei der Suche nach YAML und JSON eine herausragende Rolle spielt, ist ein selten genannter Unterschied zwischen beiden zu beachten: die Lizenz. JSON gibt vor, eine Lizenz zu haben, an die sich JSON-Benutzer halten müssen (einschließlich der rechtlich nicht eindeutigen "soll zum Guten, nicht zum Bösen verwendet werden"). YAML hat keinen solchen Lizenzanspruch, und das könnte ein wichtiger Unterschied sein (für Ihren Anwalt, wenn nicht für Sie).


Ich verwende kein JSON, ich verwende das genaue Äquivalent von JSON, ohne es JSON zu nennen. Ich nenne es PS-OFF. Wirst du mich verklagen, weil ich { "": #, [] }???
Andrew

4

Manchmal muss man sich nicht übereinander entscheiden.

In Go können Sie beispielsweise beide gleichzeitig haben:

type Person struct {
    Name string `json:"name" yaml:"name"`
    Age int `json:"age" yaml:"age"`
}

3

Aus: Arnaud Lauret Book „Das Design von Web-APIs“. ::

Das JSON-Datenformat

JSON ist ein Textdatenformat, das darauf basiert, wie die Programmiersprache JavaScript Daten beschreibt, aber trotz seines Namens vollständig sprachunabhängig ist (siehe https://www.json.org/ ). Mit JSON können Sie Objekte beschreiben, die ungeordnete Name / Wert-Paare enthalten, sowie Arrays oder Listen, die geordnete Werte enthalten (siehe Abbildung).

Geben Sie hier die Bildbeschreibung ein

Ein Objekt wird durch geschweifte Klammern ({}) begrenzt. Ein Name ist eine Zeichenfolge in Anführungszeichen ("Name") und wird durch einen Doppelpunkt (:) von seinem Wert getrennt. Ein Wert kann eine Zeichenfolge wie "Wert", eine Zahl wie 1,23, ein Boolescher Wert (wahr oder falsch), der Nullwert null, ein Objekt oder ein Array sein. Ein Array wird durch Klammern ([]) begrenzt und seine Werte durch Kommas (,) getrennt. Der JSON Format kann mit jeder Programmiersprache einfach analysiert werden. Es ist auch relativ einfach zu lesen und zu schreiben. Es ist weit verbreitet für viele Zwecke wie Datenbanken, Konfigurationsdateien und natürlich APIs.

YAML

YAML (YAML Ain't Markup Language) ist ein benutzerfreundliches Daten-Serialisierungsformat. YAML ( http://yaml.org ) ist wie JSON ein Schlüssel- / Wertdatenformat. Die Abbildung zeigt einen Vergleich der beiden.

Geben Sie hier die Bildbeschreibung ein

Beachten Sie die folgenden Punkte:

  • Es gibt keine doppelten Anführungszeichen ("") um Eigenschaftsnamen und -werte in YAML .

  • JSONs strukturellen geschweiften Klammern ({}) und Kommas (,) von JSON werden in YAML durch Zeilenumbrüche und Einrückungen ersetzt .

  • Array-Klammern ([]) und Kommas (,) werden durch Bindestriche (-) und Zeilenumbrüche in ersetzt YAML .

  • Im Gegensatz zu JSON , YAML erlaubt Kommentare die mit einer Raute (#) beginnen. Es ist relativ einfach, eines dieser Formate in das andere zu konvertieren. Seien Sie jedoch gewarnt, Sie verlieren Kommentare, wenn Sie ein YAML- Dokument in JSON konvertieren .


0

Ich finde sowohl YAML als auch JSON sehr effektiv. Die einzigen zwei Dinge, die für mich wirklich bestimmen, wann eines über das andere verwendet wird, sind eines, mit dem die Sprache am häufigsten verwendet wird. Wenn ich beispielsweise Java oder Javascript verwende, verwende ich JSON. Für Java verwende ich eigene Objekte, bei denen es sich um JSON handelt, denen jedoch einige Funktionen fehlen, und konvertiere sie in JSON, wenn ich sie in JSON benötigen oder erstellen muss. Ich mache das, weil das in Java üblich ist und es anderen Java-Entwicklern erleichtert, meinen Code zu ändern. Die zweite Sache ist, ob ich es für das Programm verwende, um Attribute zu speichern, oder ob das Programm Anweisungen in Form einer Konfigurationsdatei empfängt, in diesem Fall verwende ich YAML, weil es sehr leicht von Menschen zu lesen ist, hat nett aussehende Syntax und ist sehr einfach zu ändern, Auch wenn Sie keine Ahnung haben, wie YAML funktioniert. Das Programm liest es dann und konvertiert es in JSON oder was auch immer für diese Sprache bevorzugt wird.

Am Ende spielt es ehrlich gesagt keine Rolle. Sowohl JSON als auch YAML können von jedem erfahrenen Programmierer leicht gelesen werden.


-1
  • JSON kann keine großen Datenmengen verarbeiten, die yml vergleichen

  • Nicht für den Umgang mit verschiedenen Multimedia-Formaten geeignet.

  • JSON verfügt nicht über eine Funktion zur Unterstützung von "Kommentaren". Dies könnte allein als zusätzliches Attribut enthalten sein.

  • YAML bietet gegenüber JSON einige Vorteile wie Selbstreferenz, Unterstützung für komplexe Datentypen, eingebettete Blockliterale, Kommentare und mehr.

  • JSON ist nur lesbar, während YAML sowohl lesbar als auch bearbeitbar sein kann.
  • JSON ist eine Teilmenge von YAML, sodass YAML-Parser JSON analysieren können.
  • YAML verwendet keine zusätzlichen Trennzeichen, ist also leichter als XML und JSON.

Was meinst du mit den Punkten "große Datenmenge" und "nur lesbar"? JSON ist ein Datenformat. Was kann ein abstraktes Konzept diese beiden Einschränkungen haben?
João Farias

4
@ JoãoFarias Nehmen wir an, Sie haben 1 GB JSON-Datei und 1 GB CSV-Datei und Sie haben 256 MB Speicher. Sie können CSV-Dateien zeilenweise verarbeiten, mit JSON ist dies nicht einfach möglich. Es ist wahrscheinlich immer noch einfacher, YAML-Dateien Zeile für Zeile zu analysieren, als es JSON jemals tun würde.
NeverEndingQueue
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.