Jaka jest różnica między YAML a JSON?

735

Jakie są różnice między YAML i JSON, szczególnie biorąc pod uwagę następujące rzeczy?

  • Wydajność (czas kodowania / dekodowania)
  • Zużycie pamięci
  • Wyraźność wyrazu
  • Dostępność biblioteki, łatwość użycia (wolę C)

Planowałem użyć jednego z tych dwóch w naszym systemie osadzonym do przechowywania plików konfiguracyjnych.

Związane z:

Czy powinienem używać YAML lub JSON do przechowywania moich danych Perla?

pierrotlefou
źródło
26
Należy pamiętać, że JSON można uznać za podzbiór YAML: en.wikipedia.org/wiki/JSON#YAML
Charles,
2
@Charles, tak, ale mają one subtelną różnicę: ajaxian.com/archives/json-yaml-its-getting-closer-to-truth
pierrotlefou
1
Ponieważ YAML jest (w przybliżeniu) nadzbiorem JSON, na pytanie dotyczące wydajności nie można odpowiedzieć bez założeń, czy użyjesz tej ekspresji. Jeśli nie potrzebujesz: jak szybko parsery YAML odczytują JSON? Jeśli potrzebujesz: o ile wolniejsze są parsery JSON, jeśli pozwalasz na możliwie dłuższą reprezentację JSON tego samego pomysłu?
poolie
@jokoon Chyba „wolałbym bibliotekę C” (np. libyaml)
dbr
4
Dokumenty YAML mogą być złożone i trudne do odczytania. YAML umożliwia atak „Billion śmieje się”. Z drugiej strony, złożone obiekty, wykresy i inne struktury mogą być skutecznie serializowane w YAML. W przypadku formatów wymiany i prostych struktur preferowany jest JSON. W przypadku serializacji obiektów złożonych lub definicji gramatycznych preferowane może być YAML.
Erik Aronesty,

Odpowiedzi:

656

Technicznie YAML jest nadzbiorem JSON. Oznacza to, że przynajmniej teoretycznie parser YAML może zrozumieć JSON, ale niekoniecznie na odwrót.

Zobacz oficjalne specyfikacje w sekcji zatytułowanej „YAML: Relacja z JSON” .

Ogólnie rzecz biorąc, pewne rzeczy, które lubię w YAML, nie są dostępne w JSON.

  • Jak zauważył @jdupont , YAML jest wizualnie łatwiejszy do oglądania. W rzeczywistości strona główna YAML sama w sobie jest prawidłową wersją YAML, ale jest łatwa do odczytania dla człowieka.
  • YAML ma możliwość odwoływania się do innych elementów w pliku YAML przy użyciu „kotwic”. W ten sposób może obsługiwać informacje relacyjne, jakie można znaleźć w bazie danych MySQL.
  • YAML jest bardziej niezawodny w osadzaniu innych formatów serializacji, takich jak JSON lub XML w pliku YAML.

W praktyce żaden z tych dwóch ostatnich punktów prawdopodobnie nie będzie miał znaczenia dla rzeczy, które Ty lub ja robimy, ale w dłuższej perspektywie uważam, że YAML będzie bardziej niezawodnym i wykonalnym formatem serializacji danych.

Obecnie AJAX i inne technologie sieciowe używają JSON. YAML jest obecnie częściej wykorzystywany do przetwarzania danych offline. Na przykład jest domyślnie dołączony do pakietu wizji komputerowej OpenCV opartej na języku C, podczas gdy JSON nie.

Znajdziesz biblioteki C zarówno dla JSON, jak i YAML. Biblioteki YAML są nowsze, ale w przeszłości nie miałem z nimi problemów. Zobacz na przykład Yaml-cpp .

AndyL
źródło
199
json nie jest podzbiorem (chociaż jest blisko), a niezgodności są denerwujące, gdy je szyfrujesz. Biblioteki json są generalnie szybsze ... ( stackoverflow.com/questions/2451732/... ). zwolennicy yaml będą nalegać, aby był to podzbiór. jeśli problemem jest czytelność, użyj yaml. jeśli problem dotyczy interoperacyjności i prędkości, użyj JSON.
Erik Aronesty,
6
YAML jest nadzbiorem określonej formy składni JSON. Oznacza to, że jeśli używasz JSON w sposób zgodny z YAML, to jest to odpowiedni podzbiór. Jak komentował powyżej Pierr, specyfikacje [zmierzają w kierunku zgodności] (ajaxian.com/archives/json-yaml-its-getting-closer-to-truth).
naught101
120
YAML obsługuje także przydatne komentarze.
Den
59
@ErikAronesty JSON był zbliżony do podzbioru YAML 1.1, ale od YAML 1.2 jest teraz prawdziwym podzbiorem. YAML 1.2 został wydany przede wszystkim w celu wyeliminowania ostatnich kilku niezgodności między dwiema specyfikacjami.
00prometeusz,
64
Ze specyfikacji YAML 1.2 : „Głównym celem tej zmiany jest dostosowanie YAML do JSON jako oficjalnego podzbioru”.
Bogate C
203

Różnice:

  1. YAML, w zależności od tego, jak go używasz, może być bardziej czytelny niż JSON
  2. JSON jest często szybszy i prawdopodobnie nadal współpracuje z większą liczbą systemów
  3. Bardzo szybko można napisać „wystarczająco dobry” parser JSON
  4. Zduplikowane klucze, potencjalnie poprawne JSON, są zdecydowanie niepoprawne YAML.
  5. YAML ma mnóstwo funkcji, w tym komentarze i kotwice relacyjne. Składnia YAML jest odpowiednio złożona i może być trudna do zrozumienia.
  6. Możliwe jest zapisywanie struktur rekurencyjnych w yaml:, {a: &b [*b]}które będą się zapętlać w nieskończoność w niektórych konwerterach. Nawet przy wykrywaniu kołowym „bomba yaml” jest nadal możliwa (patrz bomba xml ).
  7. Ponieważ nie ma żadnych odniesień, nie można serializować złożonych struktur z odwołaniami do obiektów w JSON. Serializacja YAML może zatem być bardziej wydajna.
  8. W niektórych środowiskach kodowania użycie YAML może pozwolić osobie atakującej na wykonanie dowolnego kodu .

Obserwacje:

  1. Programiści Pythona są na ogół wielkimi fanami YAML, ze względu na użycie wcięć zamiast składni w nawiasach kwadratowych, aby wskazać poziomy.
  2. Wielu programistów uważa, że ​​przywiązanie „znaczenia” do wcięcia jest złym wyborem.
  3. Jeśli format danych będzie opuszczał środowisko aplikacji, analizowany w interfejsie użytkownika lub wysyłany w warstwie przesyłania komunikatów, JSON może być lepszym wyborem.
  4. YAML może być używany bezpośrednio do złożonych zadań, takich jak definicje gramatyczne, i często jest lepszym wyborem niż wymyślanie nowego języka.
Erik Aronesty
źródło
9
To jest. Głównym celem Yamla 1.2 było rozwiązanie kilku różnic kompatybilności, aby JSON był ścisłym podzbiorem. Jeśli uważasz, że specyfikacja nie osiągnęła swojego celu, Erik, wskaż gdzieś przykład prawidłowego JSON, który narusza specyfikację YAML i / lub psuje zweryfikowany parser YAML zgodny z 1.2.
SFEley,
32
@SFEley Specyfikacja YAML mówi, że potencjalnie prawidłowe są pliki JSON, które byłyby nieprawidłowe YAML. Ale to raczej nie jest w użyciu. „RFC4627 JSON wymaga, aby klucze odwzorowań były po prostu„ POWINNY ”być unikalne, podczas gdy YAML twierdzi, że„ MUSI ”być. Z technicznego punktu widzenia YAML jest zgodny ze specyfikacją JSON, wybierając traktowanie duplikatów jako błędu. W praktyce, ponieważ JSON milczy na semantyka takich duplikatów, jedynymi przenośnymi plikami JSON są te z unikalnymi kluczami, które są zatem poprawnymi plikami YAML. ” - yaml.org/spec/1.2/spec.html#id2759572
David C. Bishop
9
Komentowanie użycia wcięcia; Cóż, uważam, że może to wymagać przyzwyczajenia się i nie każdemu się to spodoba. Na przykład jestem facetem .NET. Patrzyłem na plik travis.yml i zastanawiałem się, dlaczego wystąpił problem. Dowiedziałem się, że mam zakładkę, gdzie nie ma. Nie wszyscy są przyzwyczajeni do wysadzania rzeczy z powodu preferencji spacji / tabulacji / nowych linii.
Phil,
10
Tabulatory po prostu nie są dozwolone jako znaki wcięcia. IMHO, to dobry styl kodowania we wszystkich językach - z wcięciem składniowym lub bez.
00prometeusz,
6
@Wyrmwood Osobiście lubię python i YAML i dosłownie używam ich codziennie. Zwykle używam YAML do rzeczy, które ludzie często edytują, a JSON do rzeczy, na które ludzie mogą „potrzebować” patrzeć. Zostałem poddany ważnej krytyce przez deweloperów C ++, którzy uważają wcięcia za mylące ... szczególnie, jeśli istnieje wiele poziomów lub dłuższe bloki funkcyjne. Oczywiście ... dobry testowalny kod nie ma takich rzeczy, więc zwykle nie stanowi to problemu. To moja osobista obserwacja, ale każde zwykłe wyszukiwanie w Google przyniesie wiele wyników ... więc weryfikacja jest banalna.
Erik Aronesty,
88

Ominięcie teorii ezoterycznej

To odpowiada na tytuł, a nie na szczegóły, ponieważ większość po prostu czyta tytuł z wyniku wyszukiwania w google, takim jak ja, więc czułem, że konieczne jest wyjaśnienie z perspektywy programisty .

  1. YAML używa wcięcia przestrzeni, co jest znane terytorium dla programistów Python.
  2. Programiści JavaScript uwielbiają JSON, ponieważ jest to podzbiór JavaScript i może być bezpośrednio interpretowany i zapisywany w JavaScript, a także przy użyciu krótkiego sposobu deklarowania JSON, nie wymagając podwójnych cudzysłowów w kluczach, gdy używa się typowych nazw zmiennych bez spacji.
  3. Istnieje mnóstwo parserów, które działają bardzo dobrze we wszystkich językach zarówno dla YAML, jak i JSON.
  4. Format przestrzenny YAML może być znacznie łatwiejszy do przeglądania w wielu przypadkach, ponieważ formatowanie wymaga podejścia bardziej czytelnego dla człowieka.
  5. Forma YAML, choć jest bardziej zwarta i łatwiejsza do oglądania, może być podstępnie trudna do edycji, jeśli nie masz formatowania przestrzeni widocznego w edytorze. Tabulatory nie są spacjami, co dodatkowo dezorientuje, jeśli nie masz edytora do interpretowania naciśnięć klawiszy na spacje.
  6. JSON jest znacznie szybszy do serializacji i deserializacji ze względu na znacznie mniej funkcji niż YAML do sprawdzenia, co umożliwia mniejszy i lżejszy kod do przetwarzania JSON.
  7. Powszechnym nieporozumieniem jest to, że YAML wymaga mniejszej interpunkcji i jest bardziej zwarta niż JSON, ale jest to całkowicie nieprawda. Biała spacja jest niewidoczna, więc wygląda na to, że jest mniej znaków, ale jeśli policzy się rzeczywistą białą spację, która jest niezbędna, aby YAML mogła być poprawnie interpretowana wraz z odpowiednim wcięciem, okaże się, że YAML faktycznie wymaga więcej znaków niż JSON. JSON nie używa białych znaków do reprezentowania hierarchii lub grupowania i można go łatwo spłaszczyć, usuwając niepotrzebne białe znaki, aby uzyskać bardziej kompaktowy transport.

Słoń w pokoju: sam Internet

JavaScript tak wyraźnie dominuje w Internecie o ogromną marżę, a programiści JavaScript wolą używać JSON jako formatu danych w przeważającej części wraz z popularnymi interfejsami API, więc trudno jest dyskutować o używaniu YAML nad JSON podczas programowania internetowego w ogólnym znaczeniu, ponieważ prawdopodobnie zostaniesz przegłosowany w środowisku zespołowym. W rzeczywistości większość programistów internetowych nawet nie wie, że YAML istnieje, nie mówiąc już o rozważeniu jego użycia.

Jeśli robisz jakieś programowanie internetowe, JSON jest domyślną drogą, ponieważ nie potrzebujesz kroku tłumaczenia podczas pracy z JavaScriptem, więc musisz wymyślić lepszy argument, aby w tym przypadku użyć YAML zamiast JSON.

Jason Sebring
źródło
10
Nie zgadzam się, że programiści Python wolą YAML. Python dykt jest w zasadzie JSON, lista dykt jest również w zasadzie JSON. Python ma wbudowaną bibliotekę json lib. Na marginesie jestem programistą Python i wolę JSON (większość programistów Python, których znam, woli JSON).
karantan 21.04.16
6
Jedną z rzeczy, które naprawdę niepokoją mnie w przypadku białej przestrzeni, jest to, jak łatwo jest ją pomylić i pomylić, ponieważ wcięcie nad lub nie może oznaczać, że jest zagnieżdżone lub na tym samym poziomie, a także bardzo łatwe do pomyłki, jeśli tego nie zrobisz mieć zasadę przewodnią. jest jak ukryty ups. To naprawdę nie jest taki łatwy scenariusz, o którym nikt nie mówi podczas edycji yaml. nigdy nie miałem tego problemu z Jsonem.
Jason Sebring
6
@JasonSebring. Prawie się zastanawiasz, dlaczego YAML poszedł ze spacjami. Moje pierwsze „zanurzenie w oceanie” YAML doprowadziło do zepsucia aplikacji ... wszystko z powodu przestrzeni. Można by pomyśleć, że może użycie wcięcia bez znaków drukujących miałoby o wiele więcej sensu! (To dlaczego, do cholery, nie wybrali „.” Zamiast „”?) Aby zrozumieć YAML, musisz przejść do specyfikacji. Aby zrozumieć, JSON nie potrzebuje tego. (Byłem w tym pierwszym, a nigdy w drugim). To dla mnie oznacza format, który nie jest tak naprawdę „czytelny dla człowieka”
cmroanirgo,
7
@cmroanirgo yah to było moje doświadczenie. Mój szef zmusił nas do używania YAML zamiast JSON, co sprawiło, że edytowanie i spożywanie rzeczy było niepotrzebnie niemiłe. Napisałem to z tego powodu, że licząc na to, że głosy mnie potwierdzą.
Jason Sebring
3
Problem z kartami w YAML oznacza (a) brak odczytu komunikatu o błędzie i (b) posiadanie edytora, który nie wyróżnia kart. Oba problemy można łatwo naprawić, więc nie rozumiem skarg.
toolforger
38

To pytanie ma 6 lat, ale, o dziwo, żadna z odpowiedzi tak naprawdę nie dotyczy wszystkich czterech punktów (szybkość, pamięć, ekspresyjność, przenośność).

Prędkość

Oczywiście jest to zależne od implementacji, ale ponieważ JSON jest tak szeroko stosowany i tak łatwy w implementacji, że zwykle otrzymywał większe wsparcie natywne, a tym samym szybkość. Biorąc pod uwagę, że YAML robi wszystko, co robi JSON, a także więcej ciężarówek, prawdopodobne jest, że w przypadku porównywalnych implementacji obu JSON będzie szybszy.

Jednak biorąc pod uwagę, że plik YAML może być nieco mniejszy niż jego odpowiednik JSON (z powodu mniejszej liczby plików " i ,znaków), to możliwe , że wysoce zoptymalizowany YAML parser może być szybsze w wyjątkowych okolicznościach.

Pamięć

Zasadniczo stosuje się ten sam argument. Trudno zrozumieć, dlaczego analizator składni YAML byłby kiedykolwiek bardziej wydajny pod względem pamięci niż analizator JSON, jeśli reprezentuje tę samą strukturę danych.

Wyrazistość

Jak zauważyli inni, programiści Python wolą programistów YAML, JavaScript od JSON. Zrobię te obserwacje:

  • Łatwo zapamiętać całą składnię JSON, a zatem być bardzo pewnym w zrozumieniu znaczenia każdego pliku JSON. YAML nie jest naprawdę zrozumiały dla żadnego człowieka. Liczba subtelności i przypadków krawędzi jest ekstremalna.
  • Ponieważ niewiele parserów implementuje całą specyfikację, jeszcze trudniej jest mieć pewność co do znaczenia danego wyrażenia w danym kontekście.
  • Brak komentarzy w JSON to w praktyce prawdziwy ból.

Ruchliwość

Trudno wyobrazić sobie nowoczesny język bez biblioteki JSON. Trudno też wyobrazić sobie parser JSON implementujący mniej niż pełną specyfikację. YAML ma szerokie wsparcie, ale jest mniej wszechobecny niż JSON, a każdy parser implementuje inny podzbiór. Dlatego pliki YAML są mniej interoperacyjne, niż mogłoby się wydawać.

Podsumowanie

JSON jest zwycięzcą pod względem wydajności (jeśli dotyczy) i interoperacyjności. YAML jest lepszy dla plików obsługiwanych przez człowieka. HJSON jest przyzwoitym kompromisem, choć ma znacznie zmniejszoną przenośność. JSON5 jest bardziej rozsądnym kompromisem z dobrze zdefiniowaną składnią.

Steve Bennett
źródło
3
Myślałem, że YAML jest mniejszy z powodu niewidzialnych postaci, które mnie oszukały. Niewidzialny => Nie ma, a właściwie nie. Jeśli policzysz niewidzialne znaki, które muszą tam być, zwłaszcza że YAML staje się coraz bardziej zagnieżdżony, szybko przewyższa JSON. Po prostu pomyślałem, że to bardzo interesujące, ponieważ czytelna dla człowieka część oszuka większość z nas do tego pojęcia, dopóki tak naprawdę nie pomyślałem o tym, ponieważ można spłaszczyć JSON i YAML, nie tyle. Odkryłem również, że YAML jest bardzo trudny do edycji ręcznej, a nie do czytania, po prostu edytuj, ponieważ potrzebujesz włączonych przewodników edytora, łatwo czasami myląc zagnieżdżone elementy.
Jason Sebring
1
Wydaje mi się, że żadna z odpowiedzi tutaj nie mówi wprost: „W przypadku plików ustawień / konfiguracji YAML jest lepszy (z powodów wymienionych powyżej przez wszystkich). W przypadku współpracy maszyny z maszyną używaj JSON”. Innymi słowy: jeśli twoją grupą docelową jest człowiek, YAML jest lepszy. Jeśli celem jest inny program (ale nadal chcesz, aby dane były czytelne dla ludzi), użyj JSON.
Florin T.,
To prawda, ale pytanie zawierało pewne dość konkretne parametry dotyczące tego, jak chcieli porównać te dwa parametry. Osobiście nigdy nie użyłbym YAML do niczego. Używałbym JSON dla interoperacyjności lub JSON6, jeśli ważna jest konserwacja przez ludzi.
Steve Bennett,
29

GIT i YAML

Inne odpowiedzi są dobre. Przeczytaj je najpierw. Ale dodam jeszcze jeden powód, aby czasami używać YAML: git .

Coraz częściej wiele projektów programistycznych korzysta z repozytoriów git do dystrybucji i archiwizacji. I chociaż historia repozytorium git może w równym stopniu przechowywać pliki JSON i YAML, metoda „diff” używana do śledzenia i wyświetlania zmian w pliku jest zorientowana liniowo. Ponieważ YAML jest zorientowany na linię, wszelkie drobne zmiany w pliku YAML są łatwiejsze do zauważenia przez człowieka.

Oczywiście prawdą jest, że pliki JSON można „upiększyć”, sortując ciągi / klucze i dodając wcięcia. Ale to nie jest domyślne i jestem leniwy.

Osobiście używam JSON do interakcji system-system. Często używam YAML do plików konfiguracyjnych, plików statycznych i plików śledzonych. (Zasadniczo też unikam dodawania kotwic relacyjnych YAML. Życie jest zbyt krótkie, aby wyłapywać pętle.)

Ponadto, jeśli prędkość i przestrzeń naprawdę stanowią problem, ja też nie używam. Możesz spojrzeć na BSON.

JohnAD
źródło
22

Uważam, że YAML jest łatwiejszy w oczach: mniej nawiasów, „” itd. Chociaż w YAML jest irytująca zakładka ... ale można to zrozumieć.

Pod względem wydajności / zasobów nie spodziewałbym się dużych różnic między nimi.

Ponadto mówimy o plikach konfiguracyjnych, więc nie spodziewałbym się wysokiej częstotliwości kodowania / dekodowania, prawda?

Jldupont
źródło
22
Zastanawiałem się, co rozumiesz przez irytację kart . Myślę, że chodzi o to , że znaki tabulatora nie są dozwolone w yaml , co osobiście uważam za dobry pomysł w każdym pliku źródłowym .
poolie
6
@poolie: jldupont prawdopodobnie odnosi się do znaczącej pod względem składni wiodącej białej spacji w YAML.
naught101
10
OK, ale to nie są zakładki.
poolie
20

Jeśli nie potrzebujesz żadnych funkcji, które ma YAML, a JSON nie, wolałbym JSON, ponieważ jest on bardzo prosty i jest szeroko obsługiwany (ma wiele bibliotek w wielu językach). YAML jest bardziej złożony i ma mniejsze wsparcie. Nie sądzę, że szybkość analizowania lub użycie pamięci będą bardzo różne i być może nie będzie to duża część wydajności twojego programu.


źródło
3
w jaki sposób YAML jest bardziej złożony?
Accatyyc
18
Na przykład YAML obsługuje kotwice, jak zauważono w innej odpowiedzi. Istnieją inne funkcje, takie jak rozszerzalne typy danych. To sprawia, że ​​analizowanie go jest bardziej złożone i wyjaśnia, dlaczego YAML ma większą specyfikację. Może to pogorszyć wydajność w zależności od implementacji parsera (spójrz na to pytanie: stackoverflow.com/questions/2451732/... ).
Anton Strogonoff,
5
Złożoność jest lepsza niż prostota, jeśli złożoność ta daje ci siłę do osiągnięcia ogólnej większej prostoty. Jest to z pewnością prawda w zależności od złożoności modelu danych.
Jonathan Neufeld
3
Mogę się trochę spóźnić, ale YAML może dodawać komentarze, podczas gdy JSON nie. Dla mnie jest to bardzo pomocne, jeśli chodzi o dokumentację specyfikacji
Moses Liao GZ
@Accatyyc. Myślę, że fakt, że ludzie tutaj pytają o różnicę, jest pewnym znakiem, że YAML nie jest wcale taki łatwy. Nigdy nie zadałem pytania o JSON (z wyjątkiem „dlaczego nie mogę w nim mieć komentarzy?”)
cmroanirgo
15

Technicznie YAML oferuje znacznie więcej niż JSON (YAML v1.2 jest nadzbiorem JSON):

  • komentarze
  • kotwice i dziedzictwo - przykład 3 identycznych przedmiotów:

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

Przez większość czasu ludzie nie będą korzystać z tych dodatkowych funkcji, a główna różnica polega na tym, że YAML używa wcięć, podczas gdy JSON używa nawiasów . To sprawia, że ​​YAML jest bardziej zwięzły i czytelny (dla wytrenowanego oka).

Który wybrać?

  • Dodatkowe funkcje YAML i zwięzła notacja sprawiają, że jest to dobry wybór dla plików konfiguracyjnych ( pliki nie dostarczone przez użytkownika).
  • Ograniczone funkcje JSON , szeroka obsługa i szybsze parsowanie sprawiają, że jest to doskonały wybór dla interoperacyjności i danych dostarczonych przez użytkownika .
Wernight
źródło
4

Ponieważ pytanie to jest obecnie widoczne podczas wyszukiwania YAML i JSON, warto zauważyć jedną rzadko cytowaną różnicę między nimi: licencja. JSON rzekomo ma licencję, do której użytkownicy JSON muszą się stosować (w tym prawnie niejednoznaczne „należy używać dla dobra, a nie zła”). YAML nie dochodzi takiego roszczenia licencyjnego, co może stanowić istotną różnicę (dla twojego prawnika, jeśli nie dla ciebie).

Mvr39
źródło
Nie używam JSON, używam dokładnego odpowiednika JSON, nie nazywając go JSON. Nazywam to PS-OFF. Pozwiesz mnie za używanie { "": #, [] }???
Andrew
4

Czasami nie musisz decydować się na jednego.

Na przykład w Go możesz mieć oba jednocześnie:

type Person struct {
    Name string `json:"name" yaml:"name"`
    Age int `json:"age" yaml:"age"`
}
Michael Dorner
źródło
3

From: Arnaud Lauret Book „The Design of Web APIs”. :

Format danych JSON

JSON to format danych tekstowych oparty na tym, jak język programowania JavaScript opisuje dane, ale pomimo swojej nazwy jest całkowicie niezależny od języka (patrz https://www.json.org/ ). Za pomocą JSON możesz opisywać obiekty zawierające nieuporządkowane pary nazwa / wartość, a także tablice lub listy zawierające uporządkowane wartości, jak pokazano na tym rysunku.

wprowadź opis zdjęcia tutaj

Obiekt jest ograniczony nawiasami klamrowymi ({}). Nazwa jest cytowanym ciągiem („nazwa”) i jest oddzielana od swojej wartości dwukropkiem (:). Wartość może być ciągiem takim jak „wartość”, liczbą taką jak 1.23, wartością logiczną (prawda lub fałsz), wartością zerową null, obiektem lub tablicą. Tablica jest oddzielona nawiasami kwadratowymi ([]), a jej wartości są oddzielone przecinkami (,). JSON format jest łatwo przetwarzany za pomocą dowolnego języka programowania. Jest również stosunkowo łatwy do odczytu i zapisu. Jest powszechnie stosowany do wielu zastosowań, takich jak bazy danych, pliki konfiguracyjne i, oczywiście, interfejsy API.

YAML

YAML (YAML Ain't Markup Language) to przyjazny dla człowieka format serializacji danych. Podobnie jak JSON, YAML ( http://yaml.org ) jest formatem danych klucz / wartość. Rysunek pokazuje porównanie tych dwóch.

wprowadź opis zdjęcia tutaj

Zwróć uwagę na następujące punkty:

  • W YAML nie ma podwójnych cudzysłowów („”) wokół nazw i wartości właściwości .

  • Strukturalne nawiasy klamrowe JSON ({}) i przecinki (,) są zastępowane znakami nowej linii i wcięciami w YAML .

  • Nawiasy tablicowe ([]) i przecinki (,) są zastępowane myślnikami (-) i znakami nowej linii w YAML .

  • W przeciwieństwie do JSON , YAML pozwala na komentarze zaczynające się od znaku skrótu (#). Stosunkowo łatwo jest przekonwertować jeden z tych formatów na drugi. Ostrzegamy jednak, że podczas konwersji dokumentu YAML do JSON utracisz komentarze .

HS Progr
źródło
0

Uważam, że zarówno YAML, jak i JSON są bardzo skuteczne. Jedyne dwie rzeczy, które naprawdę dyktują, gdy jedna jest używana dla mnie, to jedna, z którą język jest używany najbardziej popularnie. Na przykład, jeśli używam Java, JavaScript, użyję JSON. W Javie użyję ich własnych obiektów, które są w zasadzie JSON, ale brakuje im niektórych funkcji, i przekonwertuję je na JSON, jeśli zajdzie taka potrzeba lub zrobię to w JSON. Robię to, ponieważ jest to powszechna rzecz w Javie i ułatwia innym programistom Java modyfikowanie mojego kodu. Drugą kwestią jest to, czy używam go do zapamiętywania atrybutów programu, czy też program otrzymuje instrukcje w postaci pliku konfiguracyjnego, w tym przypadku użyję YAML, ponieważ jest bardzo łatwy do odczytania przez człowieka, ma ładny wygląda na składnię i jest bardzo łatwa do modyfikacji, nawet jeśli nie masz pojęcia, jak działa YAML. Następnie program go przeczyta i przekonwertuje na JSON lub cokolwiek innego, co jest preferowane dla tego języka.

Ostatecznie to nie ma znaczenia. Zarówno JSON, jak i YAML są łatwe do odczytania przez każdego doświadczonego programistę.

Triforcey
źródło
-1
  • JSON nie obsługuje dużych danych porównujących yml

  • Nie nadaje się do obsługi różnych formatów multimedialnych.

  • JSON nie ma funkcji do obsługi „komentarzy”. Można to uwzględnić jako dodatkowy atrybut sam.

  • YAML ma pewne zalety w stosunku do JSON, takie jak odnośniki, obsługa złożonych typów danych, osadzone literały blokowe, komentarze i wiele innych.

  • JSON jest czytelny tylko podczas gdy YAML może być zarówno czytelny jak i edytowalny.
  • JSON jest podzbiorem YAML, dzięki czemu parsery YAML mogą analizować JSON.
  • YAML nie używa żadnych dodatkowych ograniczników, więc jest bardziej lekki niż XML i JSON.
Premraj
źródło
Co rozumiesz przez „duże dane” i „tylko do odczytu” punkty? JSON to format danych, co abstrakcyjne pojęcie może mieć te dwa ograniczenia?
João Farias
4
@ JoãoFarias Powiedzmy, że masz 1 GB pliku JSON i 1 GB pliku CSV i masz 256 MB pamięci. Możesz przetwarzać plik CSV linia po linii, z JSON nie jest to łatwo możliwe. Prawdopodobnie łatwiej jest parsować plik YAML linia po linii, niż parsowanie JSON.
NeverEndingQueue