Открыть сервис

ISO/IEC 21778

ISO/IEC 21778 — это международный стандарт, определяющий информационную модель и синтаксис для обмена данными в формате JSON (JavaScript Object Notation). Стандарт был опубликован совместно Международной организацией по стандартизации (ISO) и Международной электротехнической комиссией (IEC) в 2017 году. Он полностью соответствует спецификации RFC 8259, разработанной Инженерным советом Интернета (IETF), и направлен на унификацию представления структурированных данных, не зависящего от платформы и языка программирования.

История создания

JSON как формат данных был впервые предложен программистом Дугласом Крокфордом в начале 2000-х годов. Изначально он использовался в языке JavaScript для передачи данных между клиентом и сервером, но быстро распространился за пределы веб-разработки. К 2013 году JSON стал основным форматом для обмена данными в REST API, конфигурационных файлах и системах хранения (например, NoSQL-базы данных).

Необходимость стандартизации была вызвана ростом числа несовместимых реализаций. В 2014 году IETF опубликовал RFC 7159, а затем в 2017 году — обновлённый RFC 8259. Параллельно ISO и IEC приняли этот документ как международный стандарт ISO/IEC 21778:2017. В России стандарт был введён в действие как ГОСТ Р ИСО/МЭК 21778-2021.

Основные положения стандарта

Информационная модель

ISO/IEC 21778 определяет JSON как текстовый формат, основанный на двух структурах данных:

  • Объект — неупорядоченное множество пар «ключ: значение», где ключом является строка, а значением — любой допустимый тип данных. Объект заключается в фигурные скобки {}.
  • Массив — упорядоченный список значений, который заключается в квадратные скобки [].

Значениями могут быть:

  • строки (заключены в двойные кавычки, поддерживается экранирование символов);
  • числа (целые, с плавающей точкой, в экспоненциальной записи);
  • логические значения (true и false);
  • null;
  • вложенные объекты или массивы.

Синтаксис

Стандарт предписывает строгие правила синтаксиса:

  • Имена ключей и строковые значения обязательно заключаются в двойные кавычки (одинарные не допускаются).
  • Числа записываются в десятичной системе, без ведущих нулей, с точкой в качестве разделителя дробной части.
  • Пробелы, табуляции, переводы строк и возвраты каретки считаются незначимыми и могут использоваться для форматирования.
  • Комментарии не допускаются.

Кодировка

Стандарт требует, чтобы текст JSON был закодирован в UTF-8, UTF-16 или UTF-32. На практике подавляющее большинство реализаций использует UTF-8. Для совместимости с устаревшими системами допускается использование кодировок, совместимых с ASCII.

Применение

Веб-разработка

JSON является основным форматом для обмена данными между веб-браузерами и серверами через API. Он используется в архитектурах REST и GraphQL, а также в AJAX-запросах. Пример типичного JSON-объекта:

``json { "name": "Иван", "age": 30, "isStudent": false, "courses": ["математика", "физика"] } ``

Конфигурационные файлы

Многие современные инструменты и фреймворки (например, Node.js, Docker, Kubernetes) используют JSON для хранения конфигураций. В отличие от XML, JSON менее избыточен и проще для чтения человеком.

Базы данных

NoSQL-базы данных, такие как MongoDB и Couchbase, хранят данные в формате, близком к JSON (BSON — бинарная версия). Реляционные СУБД (например, PostgreSQL) поддерживают JSON-типы для хранения полуструктурированных данных.

Интернет вещей (IoT)

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

Критика и ограничения

Отсутствие поддержки комментариев

Одно из наиболее частых замечаний к JSON — невозможность вставлять комментарии. Это затрудняет документирование конфигурационных файлов. Разработчики обходят это ограничение, используя ключи-комментарии (например, "_comment": "..."), но такой подход не стандартизирован.

Ограниченная типизация

JSON поддерживает только строки, числа, логические значения и null. Отсутствуют типы для дат, времени, бинарных данных, больших целых чисел (за пределами 64-битного диапазона). Для передачи таких данных требуется соглашение о сериализации (например, ISO 8601 для дат).

Проблемы с безопасностью

При разборе JSON в веб-приложениях возможны атаки типа «JSON-инъекция» или «Prototype pollution» (в JavaScript). Стандарт не предусматривает механизмов защиты, что требует от разработчиков использования безопасных парсеров и валидации входных данных.

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

Текстовый формат JSON менее эффективен по сравнению с бинарными протоколами (Protocol Buffers, MessagePack) при передаче больших объёмов данных. Для высоконагруженных систем часто используется сжатие (gzip) или переход на бинарные форматы.

Альтернативные форматы

  • XML — более строгий и расширяемый формат с поддержкой схем (XSD), но более избыточный по объёму.
  • YAML — формат, ориентированный на читаемость человеком, поддерживает комментарии, но сложнее в синтаксисе и менее строгий.
  • BSON — бинарный формат, используемый MongoDB, расширяющий JSON дополнительными типами (дата, бинарные данные).
  • MessagePack — компактный бинарный формат, предназначенный для повышения производительности.

Статус в России

Стандарт ISO/IEC 21778 был принят в Российской Федерации как национальный стандарт ГОСТ Р ИСО/МЭК 21778-2021 «Информационные технологии. JSON (JavaScript Object Notation)». Он применяется для разработки государственных информационных систем, электронного документооборота и межведомственного взаимодействия. Рекомендации по использованию JSON содержатся в методических документах Минцифры России.

Интересные факты

  • Название «JSON» официально произносится как «Джейсон», хотя в русскоязычном сообществе распространено произношение «Жсон» или «Джисон».
  • Дуглас Крокфорд, создатель JSON, в 2006 году подал заявку на товарный знак «JSON», но позже отказался от неё, передав формат в общественное достояние.
  • JSON используется не только в программировании, но и в научных публикациях для представления экспериментальных данных (например, в формате JSON-LD для связанных данных).

Источники

  • ISO/IEC 21778:2017. Information technology — JSON (JavaScript Object Notation).
  • RFC 8259. The JavaScript Object Notation (JSON) Data Interchange Format. IETF, 2017.
  • ГОСТ Р ИСО/МЭК 21778-2021. Информационные технологии. JSON (JavaScript Object Notation).
  • Crockford, D. (2006). JSON: The Fat-Free Alternative to XML.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →