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?
Antworten:
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.
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 .
quelle
Unterschiede:
{a: &b [*b]}
, die in einigen Konvertern unendlich schleifen. Auch bei kreisförmiger Erkennung ist eine "Yaml-Bombe" noch möglich (siehe XML-Bombe ).Beobachtungen:
quelle
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 .
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.
quelle
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:
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.
quelle
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.
quelle
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?
quelle
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.
quelle
Technisch gesehen bietet YAML viel mehr als JSON (YAML v1.2 ist eine Obermenge von JSON):
Anker und Vererbung - Beispiel für 3 identische Gegenstände:
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?
quelle
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).
quelle
{ "": #, [] }
???Manchmal muss man sich nicht übereinander entscheiden.
In Go können Sie beispielsweise beide gleichzeitig haben:
quelle
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).
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.
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 .
quelle
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.
quelle
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.
quelle