Я вважаю, що велика перевага JSON над XML полягає в тому, що я не повинен вирішувати, як форматувати дані. Як показали деякі, існує чимало способів зробити навіть прості структури даних у XML - як елементи, як значення атрибутів тощо. Тоді вам доведеться документувати це, написати XML-схему або Relax NG або якусь іншу лайну ... Це безлад.
XML може мати свої достоїнства, але для обміну базовими даними JSON є набагато компактнішим і прямим. Як розробник Python, не існує невідповідності імпедансу між простими типами даних у JSON та Python. Тож якби я писав серверний обробник для запиту AJAX, який запитував про снігові умови для певного гірськолижного курорту, я створив би словник наступним чином:
conditions = {
'new_snow_24': 5.0,
'new_snow_48': 8.5,
'base_depth': 88.0,
'comments': 'Deep and steep!',
'chains_required': True,
}
return simplejson.dumps(conditions) # Encode and dump `conditions` as a JSON string
При перекладі через JSON (використовуючи бібліотеку типу "simplejson" для Python), отримана структура JSON виглядає майже однаково (за винятком JSON, булеві букви мають нижній регістр).
Розшифровка цієї структури вимагає лише аналізатора JSON, будь то Javascript або Objective-C для нативного додатка iPhone або C # або клієнта Python. Поплавці трактуватимуться як поплавці, струни як струнні, а булеві - булеві. Використовуючи бібліотеку 'simplejson' в Python, simplejson.loads(some_json_string)заява поверне мені повну структуру даних, як я щойно зробив у наведеному вище прикладі.
Якби я написав XML, я мав би вирішити, чи робити елементи чи атрибути. Обидва наведені нижче дії:
<conditions>
<new-snow-24>5</new-snow-24>
<new-snow-48>8.5</new-snow-48>
<chains-required>yes</chains-required>
<comments>deep and steep!</comments>
</conditions>
<conditions newSnow24="5" newSnow48="8.5" chainsRequired="yes">
<comments>deep and steep!</comments>
</conditions>
Тому я не тільки повинен думати про дані, які, можливо, я хочу надіслати клієнтові, я мушу думати, як їх форматувати. XML, хоч і простіший за звичайний SGML, будучи більш суворим зі своїми правилами, все ще надає занадто багато способів думати про ці дані. Тоді мені доведеться піти про її створення. Я не міг просто взяти словник Python (або іншу просту структуру даних) і сказати «перейди, вклади себе у свій XML». Я не зміг отримати XML-документ і негайно сказати «перейдіть, зробіть себе об’єктами та структурами даних», не написавши спеціальний аналізатор або не вимагаючи додаткових накладних витрат на XML Schema / Relax NG та інші подібні болі.
Недолік цього полягає в тому, що кодувати і декодувати дані в JSON просто набагато простіше і набагато прямо, особливо для швидких обмінів. Це може стосуватися більше людей, що походять з динамічного мовного фону, оскільки основні типи даних (списки, словники тощо), вбудовані в JavaScript / JSON, безпосередньо відображають однакові або подібні типи даних у Python, Perl, Ruby тощо.