Сравнение JSON и XML

Я хочу знать, что быстрее: XML и JSON? Когда использовать какой?

6 Solutions collect form web for “Сравнение JSON и XML”

Прежде чем ответить, когда использовать какой, немного фона:

edit: Я должен упомянуть, что это сравнение действительно с точки зрения использования их в браузере с JavaScript. Нельзя использовать формат данных, и есть много хороших парсеров, которые изменят детали, чтобы сделать то, что я говорю, не совсем корректно.

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

При анализе это зависит от вашего синтаксического анализатора. Парсер, который превращает код (будь то JSON или XML) в структуру данных (например, карту), может извлечь выгоду из строгой природы XML ( схемы XML очень хорошо рассоединяют структуру данных), однако в JSON тип элемента (String / Number / Nested JSON Object) может быть выведен синтаксически, например:

myJSON = {"age" : 12, "name" : "Danielle"} 

Парсер не должен быть достаточно умным, чтобы понять, что 12 представляет собой число (и Danielle – это строка, как и любая другая). Поэтому в javascript мы можем сделать:

 anObject = JSON.parse(myJSON); anObject.age === 12 // True anObject.name == "Danielle" // True anObject.age === "12" // False 

В XML нам нужно сделать что-то вроде следующего:

  12 Danielle  

(как в сторону, это иллюстрирует тот факт, что XML является скорее более подробным, а проблема передачи данных). Чтобы использовать эти данные, мы будем запускать его через парсер, тогда нам нужно будет вызвать что-то вроде:

 myObject = parseThatXMLPlease(); thePeople = myObject.getChildren("person"); thePerson = thePeople[0]; thePerson.getChildren("name")[0].value() == "Danielle" // True thePerson.getChildren("age")[0].value() == "12" // True 

Собственно, хороший парсер вполне может набрать для вас age (с другой стороны, вы, возможно, не хотите этого). Что происходит, когда мы обращаемся к этим данным, – вместо того, чтобы выполнять поиск атрибутов, как в примере JSON выше, мы делаем поиск карты по имени ключа. Это может быть более интуитивно понятным для создания XML следующим образом:

  

Но нам все равно придется выполнять поиск по карте для доступа к нашим данным:

 myObject = parseThatXMLPlease(); age = myObject.getChildren("person")[0].getAttr("age"); 

EDIT: Оригинал:

В большинстве языков программирования (не все, на любом участке) поиск по карте, такой как этот, будет более дорогостоящим, чем поиск атрибутов (как мы получили выше, когда мы разобрали JSON).

Это вводит в заблуждение: помните, что в JavaScript (и других динамических языках) нет никакой разницы между поиском карты и полевым поиском. Фактически, поиск в поле – это просто поиск карты.

Если вы хотите действительно достойное сравнение, лучше всего провести его тестирование – сделайте тесты в контексте, где вы планируете использовать данные.

Когда я печатал, Феликс Клинг уже выложил довольно сжатый ответ, сравнивая их с точки зрения использования каждого из них, поэтому я больше не буду продолжать.

Быстрее – это не атрибут JSON или XML, или результат, который даст сравнение между ними. Если есть, то это атрибут парсеров или пропускная способность, с которой вы передаете данные.

Вот (начало) список преимуществ и недостатков JSON и XML:


JSON

Pro:

  • Простой синтаксис, который приводит к уменьшению накладных расходов «разметки» по сравнению с XML.
  • Простая в использовании с JavaScript, поскольку разметка представляет собой подмножество буквенной нотации объектов JS и имеет те же основные типы данных, что и JavaScript.
  • Схема JSON для описания и типа данных и проверки структуры
  • JsonPath для извлечения информации в глубоко вложенных структурах

Против:

  • Простой синтаксис поддерживается только несколькими различными типами данных.

XML

Pro:

  • Обобщенная разметка; можно создавать «диалекты» для любых целей
  • XML-схема для типа данных, проверка структуры. Делает также возможным создание новых типов данных
  • XSLT для преобразования в разные форматы вывода
  • XPath / XQuery для извлечения информации в глубоко вложенных структурах
  • встроенная поддержка пространств имен

Против:

  • Относительно многословный по сравнению с JSON (приводит к большему количеству данных за тот же объем информации).

Поэтому в конце концов вы должны решить, что вам нужно . Очевидно, что оба формата имеют свои законные варианты использования. Если вы в основном собираетесь использовать JavaScript, вы должны пойти с JSON.

Пожалуйста, не стесняйтесь добавлять плюсы и минусы. Я не эксперт по XML;)

Однако скорость обработки может быть не только релевантной, но, так как это вопрос, вот некоторые цифры в тесте: JSON против XML: некоторые жесткие цифры о многословии . Для скорости, в этом простом тесте, XML представляет 21% накладных расходов над JSON.

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

Кроме того, в этом тесте большое количество данных было обработано, и типичное веб-приложение не будет передавать куски данных таких размеров, размером до 90 МБ, и сжатие может оказаться нецелесообразным (для небольших блоков данных сжатый кусок будет больше, чем несжатый кусок), поэтому неприменимо.

Тем не менее, если сжатие не задействовано, JSON, как очевидно, будет меньше веса канала передачи, особенно если он передается через соединение WebSocket, где отсутствие classических HTTP-накладных расходов может сделать разницу в пользу JSON, еще больше значительное.

После передачи данные должны потребляться, и это количество отсчитывается в общем времени обработки. Если необходимо передать большие или сложные данные, отсутствие схемы, автоматически проверенной проверяющим синтаксическим анализатором XML, может потребовать дополнительной проверки данных JSON; эти проверки должны выполняться в JavaScript, что, как известно, не очень быстро, и поэтому в таких случаях может возникнуть дополнительные накладные расходы по XML.

Во всяком случае, только тестирование даст ответ для вашего конкретного случая использования (если скорость действительно является единственным вопросом, а не стандартом, ни безопасностью, ни целостностью …).

Обновление 1: стоит упомянуть, это EXI, двоичный формат XML, который предлагает сжатие с меньшими затратами, чем использование Gzip, и сохранение обработки в противном случае для распаковки сжатого XML. EXI для XML, что BSON для JSON. Ниже приведен краткий обзор с некоторой ссылкой на эффективность как в пространстве, так и во времени: EXI: последний двоичный стандарт? ,

Обновление 2: также существуют бинарные отчеты об эффективности XML, проводимые W3C, как эффективность, так и низкая память и занимаемая площадь процессора, также важна для области XML: Эффективная оценка обмена XML .

Обновление 2015-03-01

Стоит отметить в этом контексте, поскольку HTTP-накладные расходы были подняты как проблема: IANA зарегистрировала кодировку EXI (эффективный двоичный XML, упомянутый выше), в качестве кодирования контента для протокола HTTP (наряду с сжатием , дефлятом и gzip ) , Это означает, что EXI – это опция, которую можно ожидать от браузеров среди возможных HTTP-клиентов. См. Параметры протокола передачи гипертекста (iana.org) .

Я нашел эту статью на цифровом базаре действительно интересной. Цитируя их цитаты из Norm:

О JSON профи:

Если все, что вы хотите обойти, – это атомные значения или списки или hashи атомных значений, JSON обладает многими преимуществами XML: он просто доступен через Интернет, поддерживает множество приложений, легко писать программы для обработки JSON, он имеет несколько дополнительных функций, он четкий и понятный, его дизайн формален и краток, документы JSON легко создавать, и он использует Unicode. …

О преимуществах XML:

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

И я не могу удержаться от того, что «я сказал вам об этом!». на моем столе. Я с нетерпением жду встречи с людьми JSON, когда их попросят разработать более богатые API. Когда они захотят обменять менее хорошо структурированные данные, будут ли они запускать его в JSON? Я вижу случайные упоминания языка схемы для JSON, будут ли другие языки следовать? …

Я лично соглашаюсь с Нормой. Я думаю, что большинство атак на XML поступают от веб-разработчиков для типичных приложений, а не от разработчиков интеграции. Но это мое мнение! 😉

XML (расширяемый язык разметки) часто используется XHR, потому что это стандартный язык вещания, что может использоваться любым языком программирования и поддерживается как на стороне сервера, так и на стороне клиента, поэтому это наиболее гибкое решение. XML можно разделить на несколько частей, чтобы указанная группа могла развить часть программы, не затрагивая другие части. Формат XML также может быть определен XML-DTD или XML-схемой (XSL) и может быть протестирован.

JSON – формат обмена данными, который становится более популярным в качестве возможного формата JavaScript-приложений. В основном это массив обозначений объектов. JSON имеет очень простой синтаксис, поэтому его легко узнать. А также поддержка JavaScript для синтаксического анализа JSON с функцией eval . С другой стороны, функция eval имеет негативы. Например, программа может очень медленно анализировать JSON, и из-за безопасности eval может быть очень рискованным. Это не значит, что JSON не очень хорош, просто нужно быть более осторожным.

Мое предложение состоит в том, что вы должны использовать JSON для приложений с легким обменом данными, например игр. Потому что вам не нужно заботиться о обработке данных, это очень просто и быстро.

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

Я предлагаю вам использовать XML из-за скорости и безопасности, но JSON для легкого материала.

Важная вещь в JSON заключается в том, чтобы обеспечить передачу данных зашифрованными по соображениям безопасности. Несомненно, JSON намного быстрее, чем XML. Я видел, что XML занимает 100 мс, где JSON занимал только 60 мс. Данные JSON легко манипулировать.

  • Существует ли XSLT-элемент?
  • Никаких ограничений грамматики (DTD или XML-схемы), обнаруженных для документа
  • Notepad ++ XML Auto Indent + Закрытие тегов
  • Отображение XML в браузере Chrome
  • Пользовательская панель прогресса в Android?
  • Notepad ++ не запускается (notepad ++. Exe присутствует в диспетчере задач)
  • Можете ли вы указать формат для XmlSerialization datetime?
  • Каков наилучший способ анализа XML dateTime в Java?
  • xsl: как разбить строки?
  • Объявление пользовательского элемента пользовательского интерфейса Android с использованием XML
  • Удалить пространство имен в XML из веб-интерфейса ASP.NET
  • Interesting Posts

    Как проверить все файлы zip в папке, чтобы проверить, повреждены ли они или нет?

    получение значений из вложенного сложного объекта, который передается частичному представлению

    Невозможно циклически перебирать динамическую строку json в android

    Отображение и сохранение выходного файла Windows Batch

    передавать значение из одной формы в другую

    как запустить визуальную студию без плагина и всех сторонних функций

    Как подключить VPN автоматически после спящего режима / спящего режима в Vista / 7?

    Создание диаграммы с использованием динамического именованного диапазона в Excel 2010

    Тайм-аут аутентификации форм против тайм-аута sessionState

    Как подделать сетевой путь?

    Добавить MIME-сопоставление в web.config для IIS Express

    Доступ к freenode без портов

    Возможно ли повторное блокирование привода битлокатора?

    Невозможно разрешить символ «Тема» в styles.xml (Android Studio)

    Заблокировать iPhone / iPod / iPad, чтобы он мог запускать только одно приложение

    Давайте будем гением компьютера.