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?
Odpowiedzi:
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.
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 .
źródło
Różnice:
{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 ).Obserwacje:
źródło
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 .
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.
źródło
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:
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ą.
źródło
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.
źródło
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?
źródło
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
Technicznie YAML oferuje znacznie więcej niż JSON (YAML v1.2 jest nadzbiorem JSON):
kotwice i dziedzictwo - przykład 3 identycznych przedmiotów:
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ć?
źródło
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).
źródło
{ "": #, [] }
???Czasami nie musisz decydować się na jednego.
Na przykład w Go możesz mieć oba jednocześnie:
źródło
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.
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.
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 .
źródło
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ę.
źródło
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.
źródło