JSON vs XML: Który Format Danych Powinieneś Wybrać?
Szybka odpowiedź
Używaj JSON dla API, web aplikacji i plików konfiguracyjnych gdzie lekki transfer ma znaczenie. Używaj XML dla formatów document-heavy, usług SOAP i systemów wymagających walidacji schema. JSON to default dla nowoczesnych web API; XML pozostaje dominujący w enterprise SOAP i RSS/Atom.
Wstęp
JSON (JavaScript Object Notation) i XML (eXtensible Markup Language) to dwa najpowszechniej używane formaty wymiany danych. JSON to lekki, tekstowy format pochodzący z JavaScript. XML to język znaczników, który używa tagów do strukturyzacji danych. Oba są ludzko-czytelne i maszynowo-parseowalne, ale różnią się znacząco w verbosity, złożoności i fit z ecosystem.
Krok po kroku
-
Porównaj składnię i gadatliwość
JSON używa nawiasów klamrowych i par klucz-wartość: {"nazwa": "wartość"}. XML używa tagów otwierających i zamykających: <name>value</name>. XML wymaga więcej znaków dla tych samych danych — zazwyczaj 30–60% więcej bajtów niż JSON. JSON nie ma znaczników zamykających, nie ma rozróżnienia między atrybutami a elementami ani narzutem na deklarację.
-
Porównaj typy i strukturę danych
JSON obsługuje 6 typów: ciąg, liczba, wartość logiczna, null, tablica, obiekt. XML nie ma typów wbudowanych — wszystko jest tekstem, chyba że określono to za pomocą schematu (XSD). XML obsługuje atrybuty, zawartość mieszaną i przestrzenie nazw. JSON nie ma żadnego z nich, dzięki czemu jest prostszy, ale mniej wyrazisty w przypadku danych skoncentrowanych na dokumentach.
-
Porównaj parsowanie i wydajność
Analiza JSON jest szybsza w JavaScript, ponieważ odwzorowuje bezpośrednio na obiekty JS (JSON.parse). XML wymaga parsera DOM lub parsera strumienia SAX, który jest cięższy. W testach porównawczych parsowanie JSON jest zwykle 2–5 razy szybsze niż analizowanie XML DOM w przypadku równoważnych danych.
-
Porównaj ekosystem i narzędzia
JSON jest de facto standardem dla REST APIs. XML jest używany w formatach SOAP APIs, RSS/Atom, SVG, OOXML (Excel/Word) i formatach konfiguracyjnych. Nowoczesne frameworki internetowe faworyzują JSON. Struktury korporacyjne nadal szeroko korzystają z XML.
-
Zdecyduj na podstawie swojego przypadku użycia
REST APIs, bazy danych NoSQL, pliki konfiguracyjne, AJAX/aplikacje internetowe: JSON. Usługi SOAP, kanały RSS/Atom, grafika SVG, dokumenty biurowe, wiadomości korporacyjne: XML.
Przykłady
Te same dane w JSON i XML
Wejście: JSON: {"user": {"id": 1, "name": "Alice", "active": true}}
XML: <user><id>1</id><name>Alice</name><active>true</active></user>
Wyjście: JSON: 52 bajty. XML: 78 bajtów (50% więcej). Obydwa reprezentują identyczne dane.
Typowe problemy
- XML szczegółowość: XML może być o 30–60% większy niż JSON dla tych samych danych, co zwiększa przepustowość i koszty przechowywania — użyj JSON do wymiany danych, gdzie rozmiar ma znaczenie.
- JSON nie ma komentarzy: specyfikacja JSON zabrania komentarzy, co utrudnia ręczną edycję konfiguracji — użyj YAML lub JSON5, jeśli potrzebujesz komentarzy, lub użyj XML z dokumentacją schematu.
- XML niejednoznaczność atrybutu a elementu: XML może reprezentować dane jako atrybuty lub elementy podrzędne bez jasnej reguły, co prowadzi do niespójnych modeli — zdefiniuj konwencję lub użyj JSON, który ma tylko pary klucz-wartość.
- Kolizje przestrzeni nazw w XML: Przestrzenie nazw XML są złożone i często błędnie stosowane, co powoduje błędy analizy — JSON nie ma przestrzeni nazw, co upraszcza wymianę danych kosztem rozszerzalności.
Porady
- Domyślnie JSON dla nowego APIs, konfiguracji i wymiany danych — jest to nowoczesny standard sieciowy, który analizuje natywnie w każdej przeglądarce za pośrednictwem JSON.parse.
- Używaj XML tylko wtedy, gdy potrzebujesz atrybutów, zawartości mieszanej, przestrzeni nazw lub sprawdzania poprawności schematu (XSD) — jest to typowe w korporacyjnych formatach SOAP, SVG i dokumentach biurowych.
- Zweryfikuj swój JSON za pomocą lintera przed wysłaniem go do produkcji — pojedynczy końcowy przecinek lub klucz bez cudzysłowu spowoduje ciche przerwanie JSON.parse.
- Konwertując XML na JSON, z góry zdecyduj, jak postępować z atrybutami w porównaniu z elementami podrzędnymi — większość konwerterów używa konwencji takiej jak @attr dla atrybutów i #text dla zawartości mieszanej.