JSON и XML

Многие разработчики сравнивают JSON с XML при создании приложений, которые обмениваются данными между разными системами, особенно в Интернете. Это часто превращается в спор «JSON против XML», поскольку каждая сторона защищает свой предпочтительный формат.

Оказывается, JSON и XML имеют несколько разные цели, поэтому не всегда справедливо или уместно говорить, что одно «лучше» другого. Всё зависит от цели.

Давайте сперва рассмотрим пример документа на JSON и XML, содержащего одинаковые данные.

Пример на JSON

Вот некоторые данные, содержащиеся в JSON-документе.

{
  "artists" : [
    {
      "artistname" : "Deep Purple",
      "formed" : "1968",
      "albums" : [
        {
          "albumname" : "Machine Head",
          "year" : "1972",
          "genre" : "Рок"
        },
        {
          "albumname" : "Stormbringer",
          "year" : "1974",
          "genre" : "Рок"
        }
      ]
    }
  ]
}

Пример на XML

Те же данные, содержащиеся в XML-документе.

<artists>
  <artistname>Deep Purple</artistname>
  <formed>1968</formed>
  <albums>
    <album>
      <albumname>Machine Head</albumname>
      <year>1972</year>
      <genre>Рок</genre> 
    </album>
    <album>
      <albumname>Stormbringer</albumname>
      <year>1974</year>
      <genre>Рок</genre> 
    </album>
  </albums>
</artists>

Обучаемость

XML основан на тегах, поэтому его несколько легче выучить тем, кто привык к языкам разметки, таким как HTML или ColdFusion. Однако подобное утверждение можно сказать и в пользу JSON для тех, кто знаком с программированием на JavaScript или Си. Любому, кто испытывает сложности в понимании синтаксиса XML или JSON, вряд ли будет удобно работать с любым языком программирования или языком разметки.

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

Размер файла

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

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

Метаданные

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

Например, вы можете сделать что-то вроде этого.

...
  <album albumnumber="6">
...

Хотя есть возможность представить метаданные в JSON, например, превратив сущность в объект, а затем добавив метаданные в виде элементов в объекте, это не так изящно, как подход XML.

Читабельность

Браузеры, как правило, отображают XML так, чтобы человеку было легче его читать. Читатель может сразу увидеть иерархическую структуру, а также развернуть и свернуть любой элемент в дереве.

Производительность

Исследования часто показывают, что JSON быстрее и потребляет меньше ресурсов, чем XML. Например, вот это исследование — Comparison of JSON and XML Data Interchange Formats: A Case Study [PDF] из Университета штата Монтана.

Вот также интересная статья, в которой сравнивается производительность между XML, JSON, CSV и Protocol Buffers с помощью разных парсеров. JSON, похоже, имеет преимущество над XML в различных тестах производительности.

Цель

JSON и XML служат двум разным целям.

JSON — это формат обмена данными, его цель — облегчить обмен структурированными данными. Это достигается путём непосредственного представления объектов, массивов, чисел, строк и логических значений, которые часто присутствуют в исходном окружении и в месте назначения.

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

Заключение

Итак, JSON и XML оба подходят для обмена данными. Что вы будете используете, зависит от ситуации.

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

Тем не менее, популярность JSON растёт, и он, безусловно, заменяет XML в качестве предпочтительного формата обмена данными по сети.

Кроме того, это не единственные форматы обмена данными, например, существуют и другие форматы, такие как Protocol Buffers. В зависимости от ситуации, CSV может оказаться даже лучшим форматом для работы.

Автор и редакторы

Автор: Йен Диксон
Последнее изменение: 11.10.2019
Редакторы: Влад Мержевич