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 →