Что такое JSON? Лучший формат для обмена данными

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

За последние 15 лет JSON стал повсеместным в Интернете. Сегодня это формат выбора почти для каждой общедоступной веб-службы, а также он часто используется для частных веб-служб.

Популярность JSON также привела к нативной поддержке JSON многими базами данных. Реляционные базы данных, такие как PostgreSQL и MySQL, теперь поставляются со встроенной поддержкой хранения и запроса данных JSON. Базы данных NoSQL, такие как MongoDB и Neo4j, также поддерживают JSON, хотя MongoDB за кулисами использует слегка измененную двоичную версию JSON.

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

Пример JSON

Вот пример данных, закодированных в JSON:

{

  «FirstName»: «Джонатан»,

  «LastName»: «Фриман»,

  «LoginCount»: 4,

  «IsWriter»: правда,

  «WorksWith»: [«Spantree Technology Group», «»],

  "домашние питомцы": [

    {

      «Name»: «Лилли»,

      «Тип»: «Енот»

    }

  ]

}

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

JSON - это общий формат данных с минимальным количеством типов значений: строки, числа, логические значения, списки, объекты и null. Хотя нотация является подмножеством JavaScript, эти типы представлены во всех распространенных языках программирования, что делает JSON хорошим кандидатом для передачи данных через языковые пробелы.

Файлы JSON

Данные JSON хранятся в файлах с расширением .json. В соответствии с принципом «удобочитаемости» JSON, это просто текстовые файлы, которые можно легко открыть и изучить. Как объясняется в блоге SQLizer, это также является ключом к более широкому взаимодействию JSON, поскольку почти каждый язык, который вы можете назвать, может читать и обрабатывать простые текстовые файлы, и их легко отправлять через Интернет.

Зачем мне использовать JSON? 

Чтобы понять полезность и важность JSON, нам нужно немного понять историю интерактивности в Интернете. 

В начале 2000-х интерактивность в сети начала трансформироваться. В то время браузер служил главным образом «тупым» клиентом для отображения информации, а сервер делал всю тяжелую работу по подготовке контента к отображению. Когда пользователь щелкает ссылку или кнопку в браузере, на сервер будет отправлен запрос, сервер подготовит необходимую информацию в виде HTML, а браузер отобразит HTML как новую страницу. Этот шаблон был вялым и неэффективным, требуя, чтобы браузер повторно отображал все на странице, даже если был изменен только раздел страницы.

Поскольку перезагрузка полной страницы обходилась дорого, веб-разработчики обращались к новым технологиям, чтобы улучшить общее впечатление пользователя. Между тем, возможность делать веб-запросы в фоновом режиме во время показа страницы, которая была недавно введена в Internet Explorer 5, оказалась жизнеспособным подходом к постепенной загрузке данных для отображения. Вместо перезагрузки всего содержимого страницы нажатие кнопки обновления вызовет веб-запрос, который загрузится в фоновом режиме. Когда содержимое было загружено, данными можно было управлять, сохранять и отображать на странице с помощью JavaScript, универсального языка программирования в браузерах.

REST против SOAP: соединение JSON

Первоначально эти данные передавались в формате XML (пример см. Ниже) с использованием протокола обмена сообщениями SOAP (Simple Object Access Protocol). Но XML был многословным, и им было трудно управлять в JavaScript. В JavaScript уже были объекты, которые представляют собой способ выражения данных в языке, поэтому Дуглас Крокфорд взял подмножество этого выражения в качестве спецификации для нового формата обмена данными и назвал его JSON. JSON было намного проще для людей читать и для браузеров анализировать.

В течение 00-х годов другая технология веб-сервисов, называемая «Передача состояния представления» или REST, начала вытеснять SOAP с целью передачи данных. Одним из больших преимуществ программирования с использованием REST API является то, что вы можете использовать несколько форматов данных - не только XML, но также JSON и HTML. По мере того как веб-разработчики предпочитали JSON перед XML, они также предпочитали REST перед SOAP. Как сказал Константин Харченко в блоге Svitla: «Во многом успех REST обусловлен форматом JSON из-за его простоты использования на различных платформах».

Сегодня JSON является стандартом де-факто для обмена данными между веб-клиентами и мобильными клиентами, а также серверными службами. 

JSON против XML

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

  Джонатан

  Freeman

  4

  правда

    Spantree Technology Group

      Лилли

      Енот

XML не только является более подробным (в данном случае ровно вдвое более подробным), но и вносит некоторую двусмысленность при синтаксическом анализе в дружественную для JavaScript структуру данных. Преобразование XML в объект JavaScript может занять от десятков до сотен строк кода и в конечном итоге требует настройки в зависимости от конкретного анализируемого объекта. Преобразование JSON в объект JavaScript занимает одну строку кода и не требует каких-либо предварительных знаний об анализируемом объекте.

Ограничения JSON

Хотя JSON - относительно краткий и гибкий формат данных, с которым легко работать на многих языках программирования, у этого формата есть некоторые недостатки. Вот пять основных ограничений: 

  1. Нет схемы. С одной стороны, это означает, что у вас есть полная гибкость для представления данных в любом виде. С другой стороны, это означает, что вы можете легко случайно создать деформированные данные.
  2. Только один числовой тип: формат с плавающей запятой двойной точности IEEE-754. Это довольно сложно, но это просто означает, что вы не можете воспользоваться преимуществами разнообразных и тонких числовых типов, доступных во многих языках программирования.
  3. Нет типа даты. Это упущение означает, что разработчики должны прибегать к использованию строковых представлений дат, что приводит к несоответствиям форматирования, или должны представлять даты в миллисекундах с начала эпохи (1 января 1970 г.).
  4. Без комментариев. Это делает невозможным аннотирование полей в строке, что требует дополнительной документации и повышает вероятность недопонимания.
  5. Многословие. Хотя JSON менее подробен, чем XML, это не самый краткий формат обмена данными. Для массовых или специализированных услуг вам нужно использовать более эффективные форматы данных.

Когда мне следует использовать JSON?

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

В случае межсерверной связи вам может быть лучше использовать структуру сериализации, такую ​​как Apache Avro или Apache Thrift. JSON здесь неплохой выбор и может быть именно тем, что вам нужно, но ответ не так однозначен, как для Интернета и мобильной связи.

Если вы используете базы данных NoSQL, вы в значительной степени зависите от того, что дает вам база данных. В реляционных базах данных, поддерживающих JSON как тип, хорошее практическое правило - использовать его как можно реже. Реляционные базы данных настроены для структурированных данных, соответствующих определенной схеме. Хотя большинство из них теперь поддерживают более гибкие данные в форме JSON, вы можете ожидать снижения производительности при запросе свойств в этих объектах JSON.

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

Парсер JSON

Часть кода приложения, которая преобразует данные, хранящиеся в формате JSON, в формат, который может использовать приложение, называется парсером. JavaScript, как и следовало ожидать, включает собственный анализатор, метод JSON.parse ().

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

Веб-сайт json.org включает исчерпывающий список библиотек кода, которые вы можете использовать для синтаксического анализа, генерации и управления JSON на столь разных языках, как Python, C # и COBOL.

Утилиты JSON

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

  • JSON Formatter : JSONLint будет форматировать и проверять произвольный код JSON.
  • Средство просмотра JSON: у Stack.hu есть сайт, на котором создается интерактивное дерево, которое поможет вам понять структуру вашего кода JSON. 
  • JSON Beautifier: если вы хотите «красиво распечатать» свой код JSON с раскраской синтаксиса и т.п., Prettydiff может вам помочь. 
  • Конвертер JSON: нужно быстро переместить данные из формата JSON во что-то другое? Convertcsv.com имеет инструменты, которые могут конвертировать JSON в CSV (который затем можно открыть в Excel) или XML.

Учебник JSON

Готовы погрузиться в подробности и узнать больше о том, как работать с JSON в ваших интерактивных приложениях? В сети разработчиков Mozilla есть отличный учебник, который поможет вам начать работу с JSON и JavaScript. Если вы готовы перейти на другие языки, ознакомьтесь с руководством по использованию JSON с Java (от Baeldung), с Python (от DataCamp) или с C # (из Справки по тестированию программного обеспечения). Удачи!

Джош Фрулингер внес свой вклад в эту статью.