Porównanie JSON i XML [zamknięte]


273

Chcę wiedzieć, co jest szybsze: XML i JSON? Kiedy stosować który?


60
Szybciej gdzie? Przenoszenie? Przetwarzanie? Generujesz? Obie nie mają stóp, które znasz. Prawdopodobnie JSON jest w jakiś sposób „szybszy”, ponieważ ma mniejszy narzut znaczników. Z drugiej strony XML zapewnia XMLSchema, aby zapewnić typy, strukturę ... a więc ważność. Istnieje XSLT do transformacji XML w prawie każdym innym formacie wyjściowym ... To zależy od tego, czego potrzebujesz .
Felix Kling

2
Sprawdź także inne wcześniej zadane pytania: stackoverflow.com/search?q=json+vs+xml
Felix Kling

16
BLARG! To było coś, co naprawdę chciałem wiedzieć i cieszyłem się, że tu jest, a odpowiedzi były DOSKONAŁE. BŁĘDAMY was , moderatorzy: może nadszedł czas, aby rozszerzyć wasze zaangażowanie. Przynajmniej dobrze, że pozwalasz na odpowiedź.
Mark Gerolimatos

Nie obchodzi mnie, czy ten post jest wyjątkowo spóźniony do gry, ale zgadzam się. Jeśli pytanie jest duplikatem, nie ma znaczenia lub jest sprzeczne z warunkami usługi, być może (zamknięty / bezużyteczny wątek) nie powinien być pierwszą rzeczą, która pojawia się podczas wyszukiwania. (przy okazji, pojawia się drugi [duplikowany] wynik) Zgadzam się, że być może odpowiedzi powinny być uproszczone i zwięzłe, ale jeśli wynik po wyniku jest zamknięty, wątek bez odpowiedzi wypełniony komentarzami na temat tematu (co jest niezgodne z warunkami użytkowania), to to nikomu nie pomaga.
Izaac Corbett

2
Chociaż zadane pytanie jest niejasne, NIE jest to pytanie oparte na opiniach.
qwr

Odpowiedzi:


221

Przed odpowiedzią na pytanie, kiedy użyć którego, małe tło:

edycja: Powinienem wspomnieć, że to porównanie jest naprawdę z perspektywy użycia ich w przeglądarce z JavaScript. To nie jest droga albo Format danych ma być używany, i istnieje wiele dobrych parserami który zmieni dane, aby co nie mówię dość ważny.

JSON jest bardziej kompaktowy i (moim zdaniem) bardziej czytelny - w transmisji może być „szybszy” po prostu dlatego, że przesyłanych jest mniej danych.

Podczas analizowania zależy to od analizatora składni. Parser zmieniający kod (czy to JSON, czy XML) w strukturę danych (jak mapa) może skorzystać ze ścisłej natury XML ( schematy XML ładnie ujednolicają strukturę danych) - jednak w JSON typ elementu (String / Number / Nested JSON Object) można wywnioskować składniowo, np .:

myJSON = {"age" : 12,
          "name" : "Danielle"}

Analizator składni nie musi być wystarczająco inteligentny, aby uświadomić sobie, że 12reprezentuje liczbę (i Daniellejest ciągiem jak każdy inny). W javascript możemy wykonać:

anObject = JSON.parse(myJSON);
anObject.age === 12 // True
anObject.name == "Danielle" // True
anObject.age === "12" // False

W XML musielibyśmy zrobić coś takiego:

<person>
    <age>12</age>
    <name>Danielle</name>
</person>

(na marginesie, ilustruje to fakt, że XML jest bardziej szczegółowy; dotyczy transmisji danych). Aby użyć tych danych, uruchomilibyśmy je przez analizator składni, a następnie musieliśmy wywołać coś takiego:

myObject = parseThatXMLPlease();
thePeople = myObject.getChildren("person");
thePerson = thePeople[0];
thePerson.getChildren("name")[0].value() == "Danielle" // True
thePerson.getChildren("age")[0].value() == "12" // True

Właściwie dobry parser może napisać agedla ciebie (z drugiej strony, możesz tego nie chcieć). Gdy uzyskujemy dostęp do tych danych, zamiast wyszukiwania atrybutów, jak w powyższym przykładzie JSON, sprawdzamy mapę klucza name. Formowanie kodu XML może być bardziej intuicyjne:

<person name="Danielle" age="12" />

Ale nadal będziemy musieli wyszukiwać mapy, aby uzyskać dostęp do naszych danych:

myObject = parseThatXMLPlease();
age = myObject.getChildren("person")[0].getAttr("age");

EDYCJA: Oryginał:

W większości języków programowania (nie we wszystkich zakresach) wyszukiwanie mapy, takie jak to, będzie bardziej kosztowne niż wyszukiwanie atrybutów (jak wyżej, kiedy analizowaliśmy JSON).

Jest to mylące: pamiętaj, że w JavaScript (i innych dynamicznych językach) nie ma różnicy między wyszukiwaniem mapy a wyszukiwaniem pola. W rzeczywistości wyszukiwanie w polu jest tylko wyszukiwaniem mapy.

Jeśli chcesz naprawdę wartościowego porównania, najlepiej jest go przetestować - wykonaj testy porównawcze w kontekście, w którym planujesz wykorzystać dane.

Kiedy pisałem, Felix Kling udzielił już dość zwięzłej odpowiedzi, porównując je pod względem czasu użycia każdego z nich, więc nie będę iść dalej.


Tylko pedantyczna uwaga ... Wyszukiwanie pola JavaScript niekoniecznie jest wyszukiwaniem mapy. To zależy od obiektu i pola. Małe obiekty (zwłaszcza te, które nie miały właściwości dołączonych po budowie) często używały zoptymalizowanych „szybkich typów” z wbudowanymi pamięciami podręcznymi w nowoczesnych silnikach JS i wracały do ​​wolniejszych toreb właściwości (wyszukiwania map) dla obiektów o dużej liczbie właściwości lub przypadki, w których struktura obiektów często się zmienia.
Brandon Paddock

2
Uważam, że JSON jest łatwiejszy do przeanalizowania przez ludzi, ale XML do komputerów.
Jus12

5
Nieprawda, na przykład w PHP, JSON używa json.so bez zależności w 78k, XML z drugiej strony potrzebuje xml.so lub xmlreader.so w 54k / 32k, ale także wymaga libxml2.so, który to 1.4meg . Więcej kodu powoduje, że przetwarzanie i użycie większej ilości pamięci zajmuje więcej czasu. Nie wspominając, XML, ze względu na swoją strukturę węzłów / drzew, ma odwołania cykliczne, co może być uciążliwe w każdym języku, który nie ma słabych odniesień. Zauważyłem w kilku językach, że parser XML jest o wiele większy (zajmuje więcej pamięci i zużywa więcej pamięci) niż jakikolwiek inny parser JSON.
Rahly,

Dlaczego łączysz problem statusu ścisłego JS z tym niepowiązanym porównaniem? Odwoływanie się do podwójnych lub potrójnych znaków równości.
atilkan

1
@atilkan, ponieważ wiele parserów interpretuje ciągi liczbowe jako liczby lub przechowują liczby jako ciągi liczbowe.
mazunki

244

Szybszy nie jest atrybutem JSON lub XML, ani wynikiem, który dałoby porównanie między nimi. Jeśli tak, to jest to atrybut parserów lub przepustowości, z jaką przesyłane są dane.

Oto (początek) lista zalet i wad JSON i XML:


JSON

Zawodowiec:

  • Prosta składnia, która skutkuje mniejszym narzutem „znaczników” w porównaniu do XML.
  • Łatwy w użyciu w JavaScript, ponieważ znacznik jest podzbiorem literalnej notacji obiektowej JS i ma te same podstawowe typy danych co JavaScript.
  • Schemat JSON dla opisu i typu danych oraz sprawdzania poprawności struktury
  • JsonPath do wydobywania informacji z głęboko zagnieżdżonych struktur

Kon:

  • Prosta składnia, obsługiwana jest tylko garść różnych typów danych.

  • Brak wsparcia dla komentarzy.


XML

Zawodowiec:

  • Uogólniony znacznik; możliwe jest tworzenie „dialektów” do dowolnego celu
  • Schemat XML dla typu danych, sprawdzanie poprawności struktury. Umożliwia także tworzenie nowych typów danych
  • XSLT do transformacji do różnych formatów wyjściowych
  • XPath / XQuery do wydobywania informacji z głęboko zagnieżdżonych struktur
  • wbudowana obsługa przestrzeni nazw

Kon:

  • Stosunkowo pracowity w porównaniu do JSON (daje więcej danych dla tej samej ilości informacji).

Tak więc ostatecznie musisz zdecydować, czego potrzebujesz . Oczywiście oba formaty mają uzasadnione przypadki użycia. Jeśli najczęściej używasz JavaScript, powinieneś wybrać JSON.

Dodaj swoje zalety i wady. Nie jestem ekspertem od XML;)


20
Kolejny Con dla JSON i Pro dla XML: JSON nie obsługuje odwołań do obiektów (cyklicznych lub nie), XML tak. XML robi to poprzez wymuszanie idunikalności atrybutu w dokumencie.
Earth Engine

7
@EarthEngine W rzeczywistości Json.Net ( json.codeplex.com ) obsługuje odwołania do obiektów: james.newtonking.com/projects/json/help/index.html?topic=html/… .
Dmitrii Lobanov

22
@DmitryLobanov: Dodają tylko dodatkowe ograniczenia do standardu JSON, ale nie są rozpoznawane przez inne narzędzia JSON. Dlatego nie jest to „rodzime” dla JSON. Jednak w przypadku XML ograniczenie jest zapisane w standardzie, więc jest rodzime.
Earth Engine


5
JSON ma wbudowane tablice, a także wartość „null”. Podczas gdy w XML potrzebujesz jakiejś konwencji między parserami schematów. Istnieją również podobne do XSLT projekty konwersji dla JSON (np. Github.com/emlynoregan/bOTLjs )
Vasyl Boroviak

22

Szybkość przetwarzania może nie być jedyną istotną kwestią, ponieważ to jest pytanie, oto kilka liczb w teście porównawczym: JSON vs. XML: Niektóre twarde liczby o gadatliwości . Jeśli chodzi o szybkość, w tym prostym teście XML prezentuje narzut 21% w stosunku do JSON.

Ważna uwaga na temat gadatliwości, która jest, jak mówi artykuł, najczęstszym narzekaniem: nie jest to tak bardzo istotne w praktyce (ani dane XML, ani JSON nie są zazwyczaj obsługiwane przez ludzi, ale przez maszyny), nawet jeśli chodzi o Szybkość kompresji wymaga dłuższego czasu.

Ponadto w tym teście przetworzono dużą ilość danych, a typowa aplikacja internetowa nie przesyła fragmentów danych o takich rozmiarach, tak dużych jak 90 MB, a kompresja może nie być korzystna (w przypadku wystarczająco małych fragmentów danych fragment skompresowany będzie większy niż nieskompresowany fragment), więc nie dotyczy.

Mimo to, jeśli nie jest stosowana żadna kompresja, JSON, jako oczywiście szybszy, będzie ważył mniej w kanale transmisji, szczególnie jeśli jest przesyłany przez połączenie WebSocket, gdzie brak klasycznego narzutu HTTP może mieć znaczenie na korzyść JSON, a nawet więcej znaczący.

Po transmisji dane mają zostać zużyte, a to wlicza się do całkowitego czasu przetwarzania. Jeśli mają być przesłane wystarczająco duże lub wystarczająco złożone dane, brak schematu automatycznie sprawdzany przez sprawdzający parser XML, może wymagać większej kontroli danych JSON; kontrole te musiałyby zostać wykonane w JavaScript, który nie jest znany jako szczególnie szybki, dlatego w takich przypadkach może stanowić dodatkowe obciążenie XML.

W każdym razie tylko testy dostarczą odpowiedzi na konkretny przypadek użycia (jeśli prędkość jest tak naprawdę jedyną sprawą, a nie standard, ani bezpieczeństwo, ani integralność…).

Aktualizacja 1: warto wspomnieć, to EXI, binarny format XML, który oferuje kompresję przy niższych kosztach niż przy użyciu Gzip, i oszczędza przetwarzanie potrzebne w inny sposób do dekompresji skompresowanego XML. EXI to XML, a BSON to JSON. Krótki przegląd, z odniesieniem do wydajności zarówno w przestrzeni, jak i czasie: EXI: Ostatni standard binarny? .

Aktualizacja 2: istnieją również binarne raporty wydajności XML, przeprowadzane przez W3C, ponieważ wydajność i niskie zużycie pamięci i procesora są również kwestią obszaru XML: Wydajna ocena wymiany XML .

Aktualizacja 2015-03-01

Warto zwrócić uwagę w tym kontekście, ponieważ problem HTTP został podniesiony jako problem: IANA zarejestrowała kodowanie EXI (wydajne binarne XML wspomniane powyżej), jako kodowanie treści dla protokołu HTTP (wraz z kompresją , deflacją i gzip ) . Oznacza to, że EXI jest opcją, którą można spodziewać się w przeglądarkach wśród innych klientów HTTP. Zobacz parametry protokołu przesyłania hipertekstu (iana.org) .


„Jeśli chodzi o szybkość, w tym prostym teście porównawczym XML przedstawia narzut 21% w stosunku do JSON” - istnieje ogromna różnica w parsowaniu JSON w zależności od konkretnego użytego parsera. Cytowanie konkretnego analizatora składni jest prawie bez znaczenia. To samo dla XML.
Jeffrey Blattman

17

Uważam, że ten artykuł na cyfrowym bazarze jest naprawdę interesujący. Cytując swoje cytaty z Norm:

O profesjonalistach JSON:

Jeśli wszystko, co chcesz przekazać, to wartości atomowe, listy lub skróty wartości atomowych, JSON ma wiele zalet XML: jest łatwy w użyciu przez Internet, obsługuje wiele różnych aplikacji, łatwo pisać programy do przetwarzania JSON, ma kilka opcjonalnych funkcji, jest czytelny dla człowieka i dość przejrzysty, ma formalny i zwięzły wygląd, dokumenty JSON można łatwo tworzyć i używa Unicode. ...

Informacje o profesjonalistach XML:

XML radzi sobie wyjątkowo dobrze z pełnym bogactwem nieustrukturyzowanych danych. W ogóle nie martwię się o przyszłość XML, nawet jeśli jego śmierć radośnie obchodzi kadra projektantów internetowych interfejsów API.

I nie mogę się powstrzymać przed schowaniem „Mówiłem ci tak!” żeton na biurku. Nie mogę się doczekać, aby zobaczyć, co zrobią ludzie JSON, gdy zostaną poproszeni o opracowanie bogatszych interfejsów API. Czy chcąc wymieniać dane o mniejszej strukturze, czy zamieniają je w JSON? Od czasu do czasu widzę wzmianki o języku schematu dla JSON, czy pojawią się inne języki? ...

Osobiście zgadzam się z Normem. Myślę, że większość ataków na XML pochodzi od programistów sieci Web dla typowych aplikacji, a nie od programistów integracji. Ale to moja opinia! ;)


Dobrze wyłożone! Jeśli 80% aktywnych deweloperów to dzieci javascript, 80% wyrazi opinię, że JSON jest „lepszy”. Ale każdy, kto używa języków pisanych, jest trochę rozbawiony JSON. { "foo": 42 }Jakiego typu jest ten obiekt? Następnie, aby naprawić brak typu, takie rzeczy pojawiają się: { "__type": "Bar", "foo": 42 }. W XML w rodzaju kontrastu można connotated nazwy elementu: <Bar><foo>42</foo></Bar>. Tylko faceci seplenieni i javascript tacy jak json;)
BitTickler

15

XML (Extensible Markup Language) jest często używany XHR, ponieważ jest to standardowy język rozgłaszania, który może być używany przez dowolny język programowania i obsługiwany zarówno po stronie serwera, jak i klienta, więc jest to najbardziej elastyczne rozwiązanie. XML można oddzielić dla większej liczby części, aby określona grupa mogła opracować część programu bez wpływu na inne części. Format XML można również określić za pomocą XML DTD lub schematu XML (XSL) i można go przetestować.

JSON to format wymiany danych, który staje się coraz bardziej popularny jako możliwy format aplikacji JavaScript. Zasadniczo jest to tablica notacji obiektowych. JSON ma bardzo prostą składnię, dzięki czemu można go łatwo nauczyć. A także JavaScript obsługuje parsowanie JSON z evalfunkcją. Z drugiej strony evalfunkcja ma negatywy. Na przykład program może bardzo wolno analizować JSON, a ze względu na bezpieczeństwo evalmoże być bardzo ryzykowny. To nie znaczy, że JSON nie jest dobry, po prostu musimy być bardziej ostrożni.

Sugeruję, aby używać JSON do aplikacji z lekką wymianą danych, takich jak gry. Ponieważ nie musisz tak naprawdę dbać o przetwarzanie danych, jest to bardzo proste i szybkie.

XML jest najlepszy dla większych witryn, na przykład witryn handlowych lub czegoś takiego. XML może być bardziej bezpieczny i przejrzysty. Możesz utworzyć podstawową strukturę danych i schemat, aby łatwo przetestować poprawkę i łatwo podzielić ją na części.

Sugeruję używanie XML ze względu na szybkość i bezpieczeństwo, ale JSON do lekkich rzeczy.


Nie oddaję głosu, ale jestem ciekawy, jak postrzegasz JSON jako ładunek większy lub ogólnie wolniejszy. Można zastosować GZip / Deflate. Jego składnia z natury zmniejsza liczbę bajtów. JSON może również definiować swój schemat jako umowę i łatwo można go serializować.
Anthony Mason,

JSON nie musi być analizowany, aby mógł zostać przeanalizowany.
Yay295

7

Ważną rzeczą w JSON jest szyfrowanie transferu danych ze względów bezpieczeństwa. Bez wątpienia JSON jest znacznie szybszy niż XML. Widziałem, jak XML zajmuje 100 ms, podczas gdy JSON zajmuje tylko 60 ms. Dane JSON są łatwe do manipulowania.


5
Zgadzam się, JSON wygrywa bitwę o przesyłanie danych, ale brakuje jej znaczników, sprawdzania poprawności i rozszerzania elementów. Właśnie dlatego Google indeksujący sitemap.xml nie sitemap.json
Chetabahana

1
Mapa witryny została zdefiniowana zanim json stał się popularny, więc nie jest to najlepszy przykład. Mapa witryny jest również postrzegana jako serwer do serwera, na którym XML jest bardziej popularny niż JSON. (JSON jest naprawdę popularny tylko dlatego, że jest łatwy w obsłudze w JavaScript.)
Matthew Whited,

ale Google AMP używa json, a nie xml
Ashraf
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.