Kiedy preferować JSON od XML?

148

Moim wymaganiem jest po prostu wyświetlenie zestawu wartości pobranych z bazy danych na rozkładówce. Używam jQuery.

sarego
źródło

Odpowiedzi:

149

Preferuj XML zamiast JSON, jeśli jedno z poniższych jest prawdą:

  • Potrzebujesz weryfikacji wiadomości
  • Używasz XSLT
  • Twoje wiadomości zawierają dużo zaznaczonego tekstu
  • Musisz współpracować ze środowiskami, które nie obsługują formatu JSON

Preferuj JSON zamiast XML, gdy wszystkie te kryteria są prawdziwe:

  • Wiadomości nie muszą być sprawdzane lub weryfikacja ich deserializacji jest prosta
  • Nie przekształcasz wiadomości lub przekształcanie ich deserializacji jest proste
  • Twoje wiadomości to głównie dane, a nie zaznaczony tekst
  • Punkty końcowe przesyłania wiadomości mają dobre narzędzia JSON
Robert Rossney
źródło
9
JSON nie oferuje żadnej przewagi nad XML w obsłudze zaznaczonego tekstu. Ale rozumiem twój punkt widzenia; to może przesadzone.
Robert Rossney,
10
Kiedy wszystkie warunki są równe, preferuj JSON z dwóch powodów: JSON jest dużo lżejszy do przeanalizowania niż XML (przyjazny dla procesora) i wymaga dużo mniej danych do przesłania (przyjazny dla sieci).
Roger Barreto,
Kiedy używałbyś XSLT, a nie XML? XML jest dostępny, jeśli już używasz XSLT. To nie powinno wspierać argumentu za używaniem XML. To tak, jakby powiedzieć, że używaj JSON, jeśli używasz JSON.parse (). Twierdziłbym również, że łatwiej jest przekształcić obiekt JSON niż napisać transformację XSLT, ale może to być moje osobiste uprzedzenie.
Spencer,
Nie do końca zgadzam się z częścią walidacyjną w JSON. JSON jest również weryfikowalny. Sprawdź tę wersję roboczą IETF: link To wersja robocza, ale nadal…
sotn
@sotn Nie masz PL / SQL dla JSON, ponieważ masz XML (np. XQuery). Jest bazą dla niektórych baz danych NoSQL (eXist, MarkLogic Server, EMC Documentum xDB, BaseX, Zorba)
Dmytro Melnychuk
81

Używam JSON, chyba że muszę używać XML. Jest to prostsze do zrozumienia i (ponieważ wymaga mniejszego nakładu konfiguracji) łatwiej jest zaprogramować do czytania i pisania, jeśli biblioteki są dostępne w Twoim kontekście i są teraz dość wszechobecne.

Kiedy Amazon po raz pierwszy ujawnił swoje katalogi jako usługę internetową, zaoferował zarówno JSON, jak i XML. Około 90% implementujących wybrało JSON.

dkretz
źródło
56
„Używam formatu JSON, chyba że muszę używać XML”. ~ Dokładnie.
EndangeredMassa,
2
Więc głębsze pytanie brzmi: „Z jakich powodów byłbyś zobowiązany do korzystania z XML?” Czy te powody są idiotyczne; czy po prostu odzwierciedlają inne obawy, z innego punktu widzenia niż twój?
13ren
5
Kilka możliwych powodów, w tym istniejące oprogramowanie, którego nie chcę przepisywać. Ale najważniejsze jest użycie XML jako formatu wymiany danych, w którym nie kontroluję obu końców lub istnieje formalny standard, który ma zastosowanie i wymaga XML. Mogę wybrać arbitralnie tylko wtedy, gdy jestem jedynym zaangażowanym programistą.
dkretz
15

Biorąc pod uwagę twój konkretny przypadek, w którym już robisz javascript po stronie klienta, wybrałbym JSON z następujących powodów:

  • Ponieważ JSON jest natywny dla javascript, musiałbyś napisać mniej kodu po stronie klienta - po prostu eval()(lub jeszcze lepiej JSON.parse()) ciąg JSON i uzyskać obiekt, którego możesz użyć.

  • Jednocześnie ocena JSON po stronie klienta będzie wydajniejsza, a przez to szybsza.

  • Serializacja JSON generuje krótsze ciągi niż XML. Korzystanie z formatu JSON zmniejszy ilość danych przesyłanych w sieci i poprawi wydajność w tym zakresie.

Oto dalsze lektury: http://www.subbu.org/blog/2006/08/json-vs-xml

urig
źródło
7
czy eval()wysyłanie JSON nie jest wielkim nie-nie?
shoosh
@Shy, własna witryna JSON mówi, że możesz używać eval w JSON (z nawiasami owiniętymi wokół): json.org/js.html
strager
9
Zaczerpnięte z json.org: Funkcja eval jest bardzo szybka. Jednak może skompilować i uruchomić dowolny program JavaScript, więc mogą wystąpić problemy z bezpieczeństwem. Zastosowanie eval jest wskazane, gdy źródło jest zaufane i kompetentne. Znacznie bezpieczniej jest używać parsera JSON
sarego
2
Preferuj JSON.parse () zamiast eval ().
Havvy
14

Kilka innych rzeczy, na które natknąłem się w relm XML vs JSON:

JSON jest bardzo dobry dla

  • pary nazwa / wartość
  • zagnieżdżanie tych par

Co oznacza, że ​​lubi tablicę lub tablicę zagnieżdżoną. Jednak w JSON brakuje obu

  • atrybuty
  • przestrzeń nazw

Jeśli więc połączysz dwie lub więcej usług JSON, mogą wystąpić potencjalne konflikty przestrzeni nazw. Biorąc to pod uwagę, JSON może być używany do około 90% tych samych rzeczy, do których XML może być używany podczas wymiany danych z mojego doświadczenia.

zero
źródło
Inną kwestią związaną z Json jest to, że nie można łatwo scalić dwóch wiadomości json w celu utworzenia nowej wiadomości json. Zwykle nie będzie dobrze sformatowany ...
vtd-xml-author
7
Do czego potrzebujesz atrybutów? Jeśli twój element zawiera inne wartości, uczyń go obiektem - członkowie są twoimi "atrybutami". Szczerze mówiąc, uważam, że bifuralne atrybuty / struktura kontenera XML są całkowicie szkodliwe.
foo
Twierdzę, że JSON bez atrybutów jest funkcją.
brian
11

Zwykle JSON jest bardziej zwarty i szybszy do przeanalizowania.

Preferuj XML, jeśli:

  • Musisz przetworzyć dane na kliencie i możesz do tego wykorzystać XSL. Istnieje prawdopodobieństwo, że łańcuch XML + XSL będzie działał szybciej niż JSON + JavaScript, szczególnie w przypadku dużych porcji danych.
    • Dobrym przykładem jest przekonwertowanie danych na fragment kodu HTML.
  • Różne starsze przypadki:
    • Istnieje już usługa XML i przepisanie jej w formacie JSON jest kłopotliwe z pewnych powodów.
    • Musisz wysłać te dane z powrotem jako XML po lekkim przetworzeniu przy użyciu danych wejściowych użytkownika.

Jeden ważny przypadek (prawie) XML: próba wykrycia, kiedy wysyłanie fragmentów HTML jest korzystniejsze niż wysyłanie surowych danych. AHAH może zdziałać cuda w prostych aplikacjach, ale często jest pomijany. Zwykle ten styl zakłada, że ​​serwer wysyła fragmenty kodu HTML, które zostaną umieszczone na stronie internetowej bez przetwarzania.

Zwykle w przypadkach AHAH CSS jest maksymalnie wykorzystany do wizualnego masowania fragmentów kodu i implementowania prostych warunków, takich jak ukrywanie / pokazywanie odpowiednich części fragmentu przy użyciu ustawień specyficznych dla użytkownika lub aplikacji.

Eugene Lazutkin
źródło
8

JSON jest łatwy i szybszy do przeanalizowania. XML jest trochę trudniejszy do przeanalizowania i wolniej jest analizować i przenosić (w większości przypadków).

Ponieważ używasz jQuery, sugeruję użycie JSON: jQuery może pobierać dane JSON i automatycznie konwertować je na obiekt Javascript. W rzeczywistości możesz przekonwertować dane JSON na obiekt JavaScript za pomocą eval . XML musiałby zostać ręcznie przez Ciebie przekrojony (nie wiem, jak to działa w Javascript, ale jest to trudne / bardziej irytujące w większości języków, z którymi korzystałem z bibliotek XML).

strager
źródło
1
JSON jest z definicji obiektem JavaScript, jQuery tak naprawdę nie robi nic specjalnego "konwersji". Pomyślałem, że to powinno zostać wyjaśnione.
Brian Gianforcaro
5
JSON nie jest obiektem javascript, chyba że jest utworzony w javascript. Zdarza się, że jest zgodny z formatem używanym do serializacji obiektów javascript, ale jest dostępny (z odpowiednimi dodatkami i wbudowanymi funkcjami) w większości języków, co najmniej tak łatwo jak XML.
dkretz
@Gianforcaro, zdaję sobie z tego sprawę. Zmienię swój post, aby wyraźniej to zaznaczyć. @doofledorfer, powiedziałem „i przekonwertuj go na obiekt Javascript”. Nie powiedziałem, że dane JSON to obiekt Javascript.
strager
Ach, przepraszam, nie rozumiem.
strager
8

JSON jest zawsze preferowany ze względu na przetwarzanie, które przeglądarka klienta musi wykonać w celu przeanalizowania danych. Ponadto JSON to lekki format wymiany danych.

Parsowanie XML zawsze pochłania dużo zasobów przeglądarki i powinno się go unikać tak często, jak to możliwe, chyba że jest to wymagane.

Tejasvi
źródło
7

Mam post na blogu na ten temat opisujący szczegółowo historię protokołów sieciowych (tj. SOAP, XML, JSON, REST, POX, itp.) Zawierający podsumowanie oraz niektóre zalety i wady każdego z nich: http://www.servicestack.net / mythz_blog /? p = 154

Właściwie myślę, że można wyciągnąć wiele podobieństw między XML i JSON, porównując różnice między językami dynamicznymi (JSON) i statycznymi (XML).

Zasadniczo XML jest bardziej rygorystycznym, sztywniejszym formatem serializacji, który można opcjonalnie zweryfikować za pomocą towarzyszącego schematu (którym jest XSD lub DTD). XSD są dość rozbudowane i pozwalają opisać wiele różnych typów, np. Daty, godziny, wyliczenia, typy zdefiniowane przez użytkownika, a nawet dziedziczenie typów, itp. SOAP skutecznie opiera się na zestawie funkcji XML, zapewniając ustandaryzowany sposób opisywania usług internetowych ( np. typy i operacje) poprzez WSDL. Szczegółowość i złożoność specyfikacji WSDL oznacza, że ​​jej tworzenie może być bardziej żmudne, ale jednocześnie jest o wiele więcej dostępnych narzędzi, a większość nowoczesnych języków zapewnia zautomatyzowane narzędzia do generowania serwerów proxy klienta, które przejmują część obciążenia wyłączone podczas próby współpracy z usługami zewnętrznymi.

Nadal zalecałbym używanie XML dla twoich usług sieciowych, jeśli masz dobrze zdefiniowaną „usługę dla przedsiębiorstw”, która nie podlega częstym zmianom lub jeśli do twojej usługi sieciowej trzeba mieć dostęp w wielu różnych językach.

Mimo wszystkich zalet XML ma również wady. Opiera się na przestrzeniach nazw, aby zapewnić rozszerzalny format o określonej typie i umożliwia określenie atrybutów i elementów w tym samym dokumencie. Posiadanie różnych przestrzeni nazw w jednym dokumencie oznacza dużo czasu, gdy używasz Xml Parser do wyodrębniania danych, będziesz również musiał podać przestrzeń nazw każdego elementu, który chcesz pobrać / przejść. Ekstrapoluje również ładunek, czyniąc go bardziej szczegółowym, niż powinien. Możliwość wyświetlania atrybutów oraz elementów oznacza, że ​​Twoje klasy nie są dobrze odwzorowane na dokument XML. Same te funkcje sprawiają, że jest on słabo dopasowany programowo do większości języków, przez co praca z nim jest bardziej żmudna i uciążliwa.

Z drugiej strony JSON jest pod wieloma względami całkowitym przeciwieństwem XML, ponieważ jest bardzo luźny i ma prostą obsługę tylko podstawowych typów: Number, Bool, string, Objects and Arrays. Wszystko inne zasadniczo musi pasować do sznurka. Nie jest to świetne, gdy próbujesz komunikować się ponad granicami języków, ponieważ będziesz musiał przestrzegać pewnych niestandardowych specyfikacji poza pasmem, jeśli chcesz obsługiwać bardziej szczegółowe typy. Z drugiej strony, jego ograniczony zestaw funkcji jest dobrze dopasowany programowo do większości języków - i jest doskonale dostosowany do JavaScript, ponieważ ciąg JSON można oszacować bezpośrednio do obiektu JavaScript.

Rozmiar i wydajność

Mam dostępne testy porównawcze bazy danych Northwind porównujące rozmiar i szybkość między implementacjami XML Microsoftu i JSON. Zasadniczo XML jest ponad 2x większy niż JSON, ale jednocześnie wygląda na to, że Microsoft włożył wiele wysiłku w optymalizację swojego XML DataContractSerializer, ponieważ jest on ponad 30% szybszy niż JSON. Wygląda na to, że musisz znaleźć kompromis między rozmiarem a wydajnością. Niezadowolony z tego faktu zdecydowałem się napisać własny, szybki JsonSerializer, który jest teraz 2,6x szybszy od XML-a MS - więc najlepsze z obu światów :).

mit
źródło
6

Wybrałbym XML zamiast JSON, jeśli potrzebuję zweryfikować porcję danych przychodzących, ponieważ XML natywnie obsługuje to przez XSD.

lowglider
źródło
3

z JSON - ostatnie stopy

Gdy przejdziesz przez trasę JSON, napotkasz te same problemy, z którymi borykał się XML 10 lat temu:

Mieszanie danych z dwóch różnych źródeł w jednym pakiecie JSON może powodować zderzanie się etykiet elementów. Pomieszaj list przewozowy i fakturę, a nagle adres nadawcy może oznaczać coś zupełnie innego. Dlatego XML ma przestrzenie nazw .

Konwersja między różnymi strukturami JSON wymagałaby napisania przyziemnego kodu. Bardziej deklaratywny sposób mapowania danych ułatwiłby pracę. Dlatego XML zawiera XSLT .

Opisanie struktury pakietu JSON - jego pól, typów danych itp. - jest konieczne, aby ludzie mogli podłączyć się do twoich usług. W tym celu niezbędny jest język metadanych. Dlatego XML ma schematy .

Dba o prowadzenie dwóch jednoczesnych rozmów klient-serwer. Jeśli zadasz serwerowi dwa pytania i otrzymasz jedną odpowiedź, skąd wiesz, na jakie pytanie odpowiada? Dlatego XML ma korelację WS .

Özgür
źródło
2
Przestrzenie nazw to po prostu kolejne obejście; możesz zrobić to samo w JSON, jeśli chcesz. Korelacja WS również została dodana po namyśle do XML i nie jest „wbudowana”. Równie dobrze możesz dodać go również do JSON. Opis struktury (schematy) nie jest szczególny w XML; można to zrobić na wiele sposobów w każdym języku formalnym od czasu wynalezienia eBNF. Jednak XSLT jest ważnym punktem sprzedaży.
foo
2

JSON to natywne kodowanie dla javascript. Powinien być znacznie szybszy i łatwiejszy w obsłudze.

Dustin
źródło
2

Z pierwszego wiersza pod adresem http://json.org/xml.html

Extensible Markup Language (XML) to format tekstowy wywodzący się ze standardowego uogólnionego języka znaczników (SGML). W porównaniu z SGML, XML jest prosty. Dla porównania, HyperText Markup Language (HTML) jest jeszcze prostszy. Mimo to dobra książka o HTML ma grubość cala. Dzieje się tak, ponieważ formatowanie i strukturyzacja dokumentów to skomplikowana sprawa. . . .

Oczywiście JSON jest szybszy, ale jest jeszcze wyraźniejszy, że jest trudny do odczytania. Użyj JSON dla szybkości, użyj XML, jeśli będzie interakcja międzyludzka i możesz poświęcić szybkość.


źródło
2
Twoja odpowiedź nie przynosi żadnych nowych informacji ... Ale wydaje mi się, że to nadal prawda
1

Używam JSON do wszelkiego rodzaju konfiguracji, wymiany danych lub przesyłania wiadomości. Używam XML tylko wtedy, gdy muszę z innych powodów lub semantycznie oznaczyć dane podobne do dokumentów.

Lawrence Dol
źródło
1

Zarówno XML, jak i JSON są obsługiwane przez firmę Microsoft. Literały XML były nową fajną funkcją w VB 9. W nadchodzącej wersji ASP.NET 4.0 JSON jest koniecznością, aby wykorzystać moc szablonów po stronie klienta.

Z pytania, które zadałeś, wydaje się, że JSON może być wyborem dla Ciebie, ponieważ jest łatwy do przetworzenia po stronie klienta z lub bez jQuery.

MoizNgp
źródło
1

Korzystanie z formatu JSON

  • Jeśli dane mają być pobierane przez JavaScript w przeglądarce.
  • Model danych jest prosty i niezłożony (zbyt wiele obiektów złożonych).

Korzystanie z XML

  • Głównie w środowisku SOA, w którym integruje się kilka usług na heterogenicznych platformach i technologiach.
  • SOAP ma tę zaletę, że może być przesyłany przez różne protokoły inne niż HTTP.
  • Łatwy w użyciu w narzędziu do transformacji modelu danych, takim jak XSLT, XSL-FO itp.
  • Obsługa wielu baz danych do przechowywania / wyszukiwania danych XML (XQuery).
  • XML jest bardzo dojrzałym formatem danych, więc można znaleźć wiele narzędzi do obsługi każdego przypadku użycia, jaki przyjdzie Ci do głowy.
Rohitdev
źródło
1

Znalazłem ten artykuł na cyfrowym bazarze naprawdę interesujący.

Poniżej zacytowano niektóre fragmenty artykułu.

O plusach JSON:

Jeśli wszystko, co chcesz przekazać, to wartości atomowe lub listy lub skróty wartości atomowych, JSON ma wiele zalet XML: jest łatwy do użytku w Internecie, obsługuje szeroką gamę aplikacji, łatwo jest pisać programy do przetwarzania JSON, ma kilka opcjonalnych funkcji, jest czytelny dla człowieka i dość przejrzysty, jego projekt jest formalny i zwięzły, dokumenty JSON są łatwe do utworzenia i wykorzystuje Unicode. ...

O profesjonalistach XML:

XML niezwykle dobrze radzi sobie z pełnym bogactwem nieustrukturyzowanych danych. W ogóle nie martwię się o przyszłość XML, nawet jeśli jego śmierć jest radośnie obchodzona przez kadrę projektantów internetowych API.

I nie mogę się powstrzymać i nie mogę się powstrzymać i nie mogę się powstrzymać i nie mogę się oprzeć w moim biurku. Z niecierpliwością czekam na to, co zrobią ludzie z JSON, gdy zostaną poproszeni o opracowanie bogatszych interfejsów API. Kiedy chcą wymienić dane o słabszej strukturze, czy wrzucą je do formatu JSON? Od czasu do czasu widzę wzmianki o języku schematu dla JSON. Czy pojawią się inne języki? ...

Christian Vielma
źródło
Ta odpowiedź i przedstawione fragmenty całkowicie przeinaczają treść cytowanego artykułu, który zdecydowanie faworyzuje JSON. Cytaty dotyczą osoby trzeciej, z którą autor artykułu się nie zgadza. Cytowany artykuł to bardzo dobra lektura - nie ma więc negatywnego wpływu na tę odpowiedź, pomimo wprowadzenia w błąd.
Lawrence Dol
1

Szybkie zasady:

  • JSON: format danych program-program
  • YAML (nadzbiór JSON): format danych od człowieka do programu
  • XML: format znaczników dokumentu

Wyjaśnienie:

Jedyną rolą JSON jest serializacja danych obiektowych przy użyciu typów danych wspólnych dla większości języków programowania: list , skrótów i skalarów , iw tym celu naprawdę nie można tego przebić ani ulepszyć. W związku z tym „JSON nie ma numeru wersji [as] nie przewiduje się żadnych zmian gramatyki JSON”. - Douglas Crockford (Nie można tego pobić jako znaku, że doskonale wykonujesz swoją pracę)

XML był kiedyś sprzedawany jako format wymiany danych, ale rozważ dwa najczęstsze przypadki użycia: asynchroniczna komunikacja klient-serwer (AJAX) - JSON prawie całkowicie zastąpił XML (X powinien naprawdę być J) oraz usługi sieciowe : JSON sprawił, że XML stał się zbędną alternatywą.

Inną rzeczą, do której XML był szeroko używany, były pliki danych do zapisu / odczytu (?) Dla programów, ale tutaj również masz bardziej zwięzły, bardziej przyjazny programom, bardziej przyjazny dla człowieka format w YAML, nadzbiór JSON.

Tak więc pod względem reprezentacji danych JSON przewyższa XML na całej planszy. Co w takim razie zostało dla XML? Reprezentacja dokumentów o mieszanej treści, do czego była przeznaczona .

Yarin
źródło
0

Większość nowszych technologii internetowych działa przy użyciu formatu JSON, więc zdecydowanie jest to dobry powód do korzystania z formatu JSON. Ogromną zaletą jest to, że w XML można przedstawić na wiele różnych sposobów te same informacje, co w JSON jest prostsze.

Również JSON IMHO jest znacznie bardziej przejrzysty niż XML, co daje mi wyraźną przewagę. A jeśli pracujesz z .NET, Json.NET jest wyraźnym zwycięzcą, jeśli chodzi o pomoc w pracy z JSON.

xmorera
źródło