Коли віддати перевагу JSON перед XML?


148

Моя вимога полягає лише в тому, щоб відобразити набір значень, отриманих із бази даних, на спред. Я використовую jquery.

Відповіді:


149

Віддайте перевагу XML над JSON, коли будь-яке з них відповідає дійсності:

  • Вам потрібна перевірка повідомлень
  • Ви використовуєте XSLT
  • Ваші повідомлення містять багато розміченого тексту
  • Вам потрібно взаємодіяти з середовищами, які не підтримують JSON

Віддайте перевагу JSON над XML, коли все це правда:

  • Повідомлення не потрібно перевіряти, або перевірити їх десеріалізацію просто
  • Ви не трансформуєте повідомлення або перетворюєте їх десеріалізацію просто
  • Ваші повідомлення - це переважно дані, а не розмічений текст
  • Кінцеві точки обміну повідомленнями мають хороші інструменти JSON

9
JSON не пропонує жодної переваги перед XML в обробці розміченого тексту. Але я бачу вашу думку; це, можливо, завищено.
Роберт Россні

10
Коли всі умови рівні, надайте перевагу JSON з двох причин: JSON набагато легший для розбору, ніж XML (CPU friendly) та вимагає набагато менше даних для передачі (Network friendly).
Роджер Баррето

Коли ви використовуєте XSLT, а не використовуєте XML? XML - це дані, якщо ви вже використовуєте XSLT. Це не повинно підтримувати аргумент щодо використання XML. Це як сказати використовувати JSON, якщо ви використовуєте JSON.parse (). Крім того, я заперечую, що легше перетворити об'єкт JSON, ніж записати перетворення XSLT, але це може бути моїм особистим ухилом.
Спенсер

Я не повністю згоден з частиною перевірки JSON. JSON також достовірний. Перевірте цей проект IETF: посилання Це чернетка, але все ж ..
sotn

@sotn У вас немає PL / SQL для JSON, як у XML (наприклад, XQuery). Це база для деяких БД NoSQL (eXist, MarkLogic Server, EMC Documentum xDB, BaseX, Zorba)
Дмитро Мельничук,

81

Я використовую JSON, якщо мені не потрібно використовувати XML. Це простіше зрозуміти, і (оскільки це вимагає менше конфігурації накладних витрат), легше програмувати для читання та запису, якщо бібліотеки доступні у вашому контексті, і вони зараз досить всюдисущі.

Коли Amazon вперше виставив свої каталоги як веб-сервіс, вони запропонували як JSON, так і XML. Щось на зразок 90% реалізаторів обрали JSON.


56
"Я використовую JSON, якщо мені не потрібно використовувати XML." ~ Точно.
EndangeredMassa

2
Отже, більш глибоке питання: "З яких причин вам потрібно буде використовувати XML?" Ці причини ідіотичні; чи вони просто відображають різні побоювання, з іншого погляду на ваш?
13н

5
Кілька можливих причин, включаючи наявне програмне забезпечення, яке я не хочу переписувати. Але найважливіше - це використовувати XML як формат обміну даними, де я не контролюю обидва цілі, або існує офіційний стандарт, який застосовується і вимагає XML. Я можу вибрати довільно лише тоді, коли я єдиний розробник.
dkretz

15

З огляду на ваш конкретний випадок, коли ви вже робите JavaScript на стороні клієнта, я б пішов із JSON з цих причин:

  • Оскільки JSON є власником javascript, вам доведеться писати менше коду на стороні клієнта - Просто eval()(або, ще краще JSON.parse()), рядок JSON і отримати об'єкт, яким ви можете користуватися.

  • У той же час оцінка JSON на стороні клієнта буде ефективнішою і, отже, швидшою.

  • Серіалізація JSON створює більш короткі рядки, ніж XML. Використання JSON зменшить кількість даних, що проходять через провід, та покращить продуктивність у цьому відношенні.

Ось додаткове читання: http://www.subbu.org/blog/2006/08/json-vs-xml


7
чи не eval()ін JSON великий ні-ні?
shoosh

@Shy, власний сайт JSON говорить, що ви можете використовувати eval на JSON (із круглими дужками): json.org/js.html
strager

9
Взято з json.org: Функція eval дуже швидка. Однак він може компілювати та виконувати будь-яку програму JavaScript, тому можуть виникнути проблеми із безпекою. Використання eval вказується тоді, коли джерело довірене та компетентне. Набагато безпечніше використовувати парсер JSON
sarego

2
Віддайте перевагу JSON.parse () до eval ().
Havvy

14

Ще деякі речі, з якими я зіткнувся в XML vs JSON relm:

JSON дуже хороший для

  • пари імен / значення
  • гніздування цих пар

Що означає, що він має тенденцію подобатися масиву або вкладеного масиву. Однак JSON не вистачає обох

  • атрибути
  • простір імен

Отже, якщо ви об'єднали два або більше служб JSON, можливі конфлікти в просторі імен. При цьому, JSON може бути використаний приблизно для 90% тих же речей, якими можна користуватися XML при обміні даними, зі свого досвіду.


Інша проблема Json полягає в тому, що ви не можете легко об'єднати два повідомлення json, щоб створити нове повідомлення json. Зазвичай це не буде добре сформовано ..
vtd-xml-author

7
Для чого вам потрібні атрибути? Якщо ваш елемент містить інші значення, зробіть його об’єктом - члени - це ваші "атрибути". Чесно кажучи, я вважаю, що біфуркальні атрибути / структура контейнерів XML повністю згубні.
foo

Я б стверджував, що JSON не має атрибутів - це особливість.
Брайан

11

Зазвичай JSON більш компактний і швидший для розбору.

Віддайте перевагу XML, якщо:

  • Вам потрібно обробити дані про клієнта, і ви можете використовувати для цього XSL. Можливо, ланцюжок XML + XSL буде працювати швидше, ніж JSON + JavaScript, особливо для великих фрагментів даних.
    • Хороший випадок - це перетворення даних у фрагмент HTML.
  • Різні випадки спадщини:
    • Існує існуюча служба XML, і це неприємно переписувати її з JSON з якихось причин.
    • Ви повинні опублікувати ці дані назад як XML після легкої обробки з використанням вводу користувача.

Один важливий випадок (майже) XML: спробувати виявити при надсиланні фрагментів HTML вигідніше, ніж надсилання необроблених даних. АХ АХ може творити чудеса в простих програмах, але часто не помічається. Зазвичай цей стиль передбачає, що сервер надсилає фрагменти HTML, які будуть вбудовані на веб-сторінці без обробки.

Зазвичай у випадках AHAH CSS застосовується до максимуму, щоб візуально масажувати фрагменти та застосовувати прості умови, такі як приховування / показ відповідних частин фрагмента, використовуючи налаштування, що стосуються користувачів або програм.


8

JSON легко та швидше розбирати. XML трохи складніше розбирати та повільніше розбирати та переносити (у більшості випадків).

Оскільки ви використовуєте jQuery, пропоную використовувати JSON: jQuery може відновити дані JSON та автоматично перетворити їх у об'єкт Javascript. Насправді ви можете конвертувати дані JSON в об’єкт Javascript за допомогою eval . Вам слід передати XML вручну (я не знаю, як це працює в Javascript, але важко / дратує більшість мов, з якими я використовував бібліотеки XML).


1
JSON за визначенням є об’єктом JavaScript, jQuery насправді не робить нічого особливого "перетворення". Просто думав Це слід уточнити.
Брайан Джанфоркаро

5
JSON не є об'єктом javascript, якщо він не інстанціюється у javascript. Це трапляється дотримуватися формату, який використовується для серіалізації об'єктів javascript, але він доступний (з належними додатками та вбудованими версіями) з більшості мов, принаймні так просто, як і XML.
dkretz

@Gianforcaro, я це усвідомлюю. Я відредагую свій пост, щоб викласти це чіткіше. @doofledorfer, я сказав: "і перетворити його в об'єкт Javascript". Я не сказав, що дані JSON - це об'єкт Javascript.
страгер

Ах, вибачте, цього не зловив.
страгер

8

JSON завжди кращий з точки зору обробки клієнтського браузера для аналізу даних. Також JSON - це невеликий формат обміну даними.

XML-аналіз завжди споживає багато ресурсів браузера і його слід уникати настільки, наскільки ми можемо, якщо не вимагається інше.


7

У мене є повідомлення в блозі на цю тему, де детально описується історія веб-протоколів (наприклад, SOAP, XML, JSON, REST, POX тощо), де викладено резюме, а також деякі переваги та недоліки кожного: http://www.servicestack.net / mythz_blog /? p = 154

Я насправді думаю, що ви можете зробити багато подібності між XML та JSON, порівнявши відмінності між динамічною (JSON) та статичною (XML) мовою.

В основному XML - це більш жорсткий і жорсткий формат серіалізації, який за бажанням можна перевірити за допомогою супровідної схеми (яка є або XSD, або DTD). XSD досить складні і дозволяють описати безліч різних типів, наприклад, дати, строки, перерахунки, типи успадковування, визначені користувачем, і навіть успадкування типів тощо. SOAP ефективно будується поверх набору функцій XML, забезпечуючи стандартизований спосіб опису ваших веб-служб ( наприклад, типи та операції) через WSDL. Багатослівність та складність специфікації WSDL означає, що розробляти її можна більш втомливо, але в той же час є набагато більше інструментів, доступних для вас, і більшість сучасних мов надають автоматизовані інструменти для створення клієнтських проксі-сервісів, які беруть на себе частину тягаря вимкнено при взаємодії із зовнішніми службами.

Я все-таки рекомендую використовувати XML для своїх веб-служб, якщо у вас є чітко визначений «корпоративний сервіс», який не підлягає частому зміні, або до вашого веб-служби потрібно звертатися з багатьох різних мов.

У всіх своїх перевагах XML також є і недоліками. Він покладається на простори імен, щоб надати введений розширюваний формат і дозволяє задавати атрибути та елементи в одному документі. Наявність різних просторів імен в одному документі означає багато часу при використанні аналізатора Xml для вилучення даних, вам також потрібно буде забезпечити простір імен кожного елемента, який ви хочете отримати / пройти. Він також екстраполює корисне навантаження, роблячи його більш багатослівним, ніж потрібно. Наявність можливості виводити атрибути, а також елементи означає, що ваші класи не відображаються добре в XML-документі. Тільки ці функції роблять його поганим програмним пристосуванням для більшості мов, що робить його більш втомливим і громіздким для роботи.

З іншого боку, JSON є повною протилежністю XML, оскільки він дуже вільно набраний та має просту підтримку основних типів: Number, Bool, string, Objects and Arrays. Все інше по суті повинно вміщуватися в рядок. Це не чудово, коли ви намагаєтеся спілкуватися через мовні межі, оскільки вам потрібно буде дотримуватися певної нестандартної специфікації, якщо ви хочете підтримувати більш конкретні типи. Зверху його обмежений набір функцій добре підходить для програмного забезпечення для більшості мов - і цілком підходить для JavaScript, оскільки рядок JSON можна зрівняти безпосередньо в об’єкт JavaScript.

Розмір та продуктивність

У мене є кілька орієнтирів бази даних на північному повітрі, які порівнюють розмір та швидкість між реалізаціями Microsofts XML та JSON. В основному XML більше ніж в 2 рази перевищує розмір JSON, але в той же час, схоже, Microsoft докладає великих зусиль для оптимізації свого XML DataContractSerializer, оскільки він на 30% швидший, ніж JSON. Здається, що вам доведеться робити компроміс між розміром і продуктивністю. Не задоволений цим фактом, я вирішив написати свій власний швидкий JsonSerializer, який зараз на 2,6 рази швидший, ніж XML у MS - так найкраще в обох світах :).


6

Я б вибрав XML через JSON, якщо мені потрібно перевірити шматок вхідних даних, оскільки XML підтримує це через XSD.


3

від JSON - останні ноги

Піднімаючись по маршруту JSON, ви стикаєтеся з тими ж проблемами, з якими стикалося XML 10 років тому:

Змішування даних з двох різних джерел в одному пакеті JSON може призвести до того, що мітки елементів стикаються одна з одною. Змішайте пакувальний лист і рахунок-фактуру, і раптом Адреса може означати щось зовсім інше. Тому XML має простори імен .

Перетворення між різними структурами JSON вимагає написання мирського коду. Більш декларативний спосіб відображення даних полегшить роботу. Ось чому XML має XSLT .

Опис структури пакета JSON - його поля, типи даних тощо - необхідний для того, щоб люди могли підключитися до ваших послуг. Для цього важливо мати мову метаданих. Ось чому XML має схеми .

Ведення двох одночасних розмов клієнт-сервер допоможе. Якщо ви задаєте серверу два запитання і отримаєте одну відповідь назад, як ви знаєте, на яке питання він відповідає? Ось чому XML має WS-кореляцію .


2
Простори імен - лише інше рішення; ви можете зробити те саме в JSON, якщо хочете. WS-Кореляція також була додана як подумка до XML і не є "вбудованою". Ви також можете додати його до JSON. Опис структури (схеми) не є особливим для XML; ви можете зробити це різними способами на будь-якій формальній мові з часу створення eBNF. Хоча XSLT є дійсною точкою продажу.
foo

2

JSON - це кодування для JavaScript. З цим слід працювати набагато швидше і простіше.


2

З першого рядка за адресою http://json.org/xml.html

Розширювана мова розмітки (XML) - це текстовий формат, похідний від стандартної узагальненої мови розмітки (SGML). Порівняно з SGML, XML є простим. Мова порівняння HyperText (HTML), порівняно, ще простіша. Незважаючи на це, хороший довідник з HTML - товщина дюйма. Це тому, що форматування та структурування документів - справа складна. . . .

Ясно, що JSON швидше, але ще зрозуміліше, що його важко читати. Використовуйте JSON для швидкості, використовуйте XML, якщо буде взаємодія між людьми і ви можете пожертвувати швидкістю.


2
Ваша відповідь не приносить жодної нової інформації ... Але я думаю, що це все-таки правда

1

Я використовую JSON для будь-якого типу конфігурації, обміну даними або обміну повідомленнями. Я використовую XML лише в тому випадку, якщо мені потрібно з інших причин або для семантичного маркування даних, подібних до документів.


1

І XML, і JSON підтримуються Microsoft. XML-літерали стали новою цікавою функцією VB 9. У майбутній версії ASP.NET 4.0 JSON є обов'язковим для використання сили шаблону на стороні клієнта.

З питання, яке ви задали, здається, що JSON може стати вибором для вас, оскільки його легко обробити на стороні клієнта з або без jQuery.


1

Використання JSON

  • Якщо дані будуть використовуватися JavaScript у браузері.
  • Модель даних проста і не складна (занадто багато складених об'єктів).

Використання XML

  • Переважно в середовищі SOA, де ви інтегруєте кілька сервісів на неоднорідних платформах і технологіях.
  • SOAP має перевагу в тому, що він може передаватися через різні протоколи, крім HTTP.
  • Простий у використанні в інструменті трансформації моделі даних, як XSLT, XSL-FO і т.д.
  • Багато підтримки бази даних для зберігання / запитів (XQuery) XML-даних.
  • XML - це дуже зрілий формат даних, тому ви знайдете безліч інструментів для підтримки будь-якого випадку використання, про який ви можете придумати.

1

Цю статтю на цифровому базарі я вважав дійсно цікавою.

Деякі частини статті цитуються нижче.

Про плюси JSON:

Якщо все, що ви хочете пройти, - це атомні значення чи списки чи хеші атомних значень, JSON має багато переваг XML: він легко доступний через Інтернет, підтримує широкий спектр програм, легко писати програми для обробки JSON, У нього є кілька необов'язкових функцій, він зрозумілий і зрозумілий для людини, його дизайн формальний і стислий, документи JSON легко створювати, і він використовує Unicode. ...

Про плюси XML:

XML надзвичайно добре справляється з повним багатством неструктурованих даних. Мене взагалі не хвилює майбутнє XML, навіть якщо його смерть радісно святкує кадр дизайнерів веб-API.

І я не можу протистояти налаштуванню "Я вам це сказав!" жетон в моєму столі. Я з нетерпінням чекаю, що люди JSON роблять, коли їх просять розробити багатші API. Коли вони хочуть обмінюватися менш добре структурованими даними, чи впорядкують їх у JSON? Я бачу, що періодично згадується мова схеми для JSON, чи дотримуватимуться інші мови? ...


Ця відповідь та уривки повністю подавали тенор цитованої статті, що сильно виступає за JSON. Цитати є сторонніми особами, з якими автор статті не згоден. Цитована стаття є дуже хорошою для прочитання - тому жодної суперечки щодо цієї відповіді, незважаючи на хибну інформацію.
Лоуренс Дол

1

Швидкі правила:

  • JSON: формат даних програми до програми
  • YAML (суперсет JSON): формат даних від людини до програми
  • XML: формат розмітки документа

Пояснення:

Єдиною роллю JSON є серіалізація об'єктно-орієнтованих даних, використовуючи типи даних, загальні для більшості мов програмування: списки , хеші та скаляри , і для цього її реально не можна побити чи покращити. На думку "JSON не має номера версії [як] жодних змін до граматики JSON не передбачається". - Дуглас Крокфорд (Не можу перемогти це як знак того, що ви прекрасно виконуєте свою роботу)

Колись XML продавались як формат зміни даних, але врахуйте два найпоширеніших випадки використання: Асинхронний зв’язок клієнт-сервер (AJAX) - JSON в значній мірі замінив XML повністю (X справді повинен бути J) та веб-сервіси : JSON зробила XML зайвою альтернативою.

Інша річ, для якої широко використовували XML - це файли даних, що записуються / читаються (?) Для програм, але і тут ви маєте більш стислий, більш програмний, більш зручний для людини формат у YAML, суперсет JSON.

Таким чином, для представлення даних JSON перемагає XML по всій платі. Що тоді залишилося для XML? Представлення змішаного змісту документів, для чого воно і було призначене .


0

Більшість сучасних веб-технологій працюють за допомогою JSON, тому, безумовно, вагома причина для використання JSON. Великою перевагою є те, що в XML ви можете представляти декількома різними способами одну і ту ж інформацію, яка в JSON є більш простою.

Також JSON IMHO набагато чіткіше, ніж XML, що робить для мене явну перевагу. А якщо ви працюєте з .NET, Json.NET - явний переможець, який допоможе вам працювати з JSON.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.