Когда предпочесть JSON XML


148

Мое требование - просто отобразить набор значений, извлеченных из базы данных, на развороте. Я использую JQuery.

Ответы:


149

Пользуйтесь XML над JSON, когда любое из них верно:

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

Пользуйтесь JSON над XML, когда все это верно:

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

9
JSON не предлагает никаких преимуществ перед XML в обработке размеченного текста. Но я понимаю вашу точку зрения; это может быть завышено.
Роберт Россни

10
Когда все условия равны, предпочтение отдается JSON по двум причинам: анализ JSON намного легче, чем XML (дружественный к ЦП), и требует гораздо меньше данных для передачи (дружественный к сети).
Роджер Баррето

Когда вы будете использовать 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 ().
Хавви

14

Некоторые другие вещи, с которыми я столкнулся в XML против 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 более выгодна, чем отправка необработанных данных. AHAH может творить чудеса в простых приложениях, но часто упускается из виду. Обычно этот стиль предполагает, что сервер отправляет фрагменты 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 /? р = 154

Я на самом деле думаю, что вы можете сделать много общего между XML и JSON, сравнивая различия между динамическим (JSON) и статическим (XML) языками.

По сути, XML является более строгим, более жестким форматом сериализации, который может быть дополнительно проверен с помощью сопровождающей схемы (которая является либо XSD, либо DTD). XSD довольно сложны и позволяют вам описывать множество различных типов, например, даты, время, перечисления, определяемые пользователем типы и даже наследование типов и т. Д. SOAP эффективно основывается на наборе функций XML, предоставляя стандартизированный способ описания ваших веб-сервисов ( например, типы и операции) через WSDL. Многословность и сложность спецификации WSDL означает, что ее разработка может быть более утомительной, но в то же время вам доступно гораздо больше инструментов, а большинство современных языков предоставляют автоматизированные инструменты для генерации прокси-серверов ваших клиентов, принимая на себя часть нагрузки. выкл при попытке взаимодействия с внешними сервисами.

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

При всех своих преимуществах XML также имеет свои недостатки. Он использует пространства имен для предоставления типизируемого расширяемого формата и позволяет указывать атрибуты и элементы в одном и том же документе. Наличие разных пространств имен в одном документе означает, что при использовании синтаксического анализатора XML для извлечения данных требуется много времени, вам также потребуется предоставить пространство имен для каждого элемента, который вы хотите получить / просмотреть. Он также экстраполирует полезную нагрузку, делая ее более многословной, чем она должна быть. Возможность вывода атрибутов, а также элементов означает, что ваши классы не отображаются должным образом в XML-документ. Одни только эти функции делают его плохо подходящим для большинства языков, что делает его более утомительным и громоздким в работе.

JSON, с другой стороны, является полной противоположностью XML во многих отношениях, поскольку он очень свободно набран и имеет простую поддержку только основных типов: Number, Bool, string, Objects и Arrays. Все остальное по сути должно вписываться в строку. Это не очень хорошо, когда вы пытаетесь общаться через языковые границы, так как вам нужно будет придерживаться некоторой внеполосной нестандартной спецификации, если вы хотите поддерживать более конкретные типы. На перевернутом его ограниченный набор функций делает хорошую программную посадку на большинстве языков - и идеально подходит для JavaScript в виде строки JSON можно eval'ed непосредственно в объект JavaScript.

Размер и производительность

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


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 прост. Язык разметки гипертекста (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.