ECMA-404
ECMA-404 — это международный стандарт, определяющий синтаксис и семантику формата обмена данными JSON (JavaScript Object Notation). Он разработан и поддерживается Европейской ассоциацией производителей компьютеров (Ecma International) и описывает текстовый формат, не зависящий от языка программирования, предназначенный для структурированного представления данных. Стандарт гарантирует интероперабельность (способность к совместной работе) систем, использующих JSON.
История
JSON как формат был впервые предложен программистом Дугласом Крокфордом в начале 2000-х годов как подмножество синтаксиса литералов объектов языка JavaScript. Его популярность быстро росла благодаря простоте и удобству использования в веб-приложениях, особенно в архитектуре AJAX (Asynchronous JavaScript and XML), где он начал вытеснять более громоздкий XML.
В 2013 году Ecma International, известная стандартизацией языка JavaScript (ECMAScript, стандарт ECMA-262), учредила технический комитет TC39 для формализации спецификации JSON. Результатом работы стал стандарт ECMA-404, первая редакция которого была опубликована в октябре 2013 года. В декабре 2017 года была принята вторая редакция, которая исправила неточности и уточнила формулировки, но не изменила синтаксис формата.
В 2017 году стандарт ECMA-404 был также принят как международный стандарт ISO/IEC 21778:2017 («Информационные технологии — Формат обмена данными JSON — Синтаксис»), что закрепило его статус как глобального стандарта.
Структура и синтаксис
ECMA-404 определяет только синтаксис JSON, не затрагивая вопросы семантики конкретных приложений. Формат основан на двух базовых структурах:
- Объект — неупорядоченный набор пар «ключ: значение», заключённый в фигурные скобки
{}. Ключом может быть только строка в двойных кавычках. - Массив — упорядоченный список значений, заключённый в квадратные скобки
[].
Допустимые типы значений
Стандарт разрешает следующие типы данных:
- Строка — последовательность символов Unicode, заключённая в двойные кавычки (
"). Для экранирования управляющих символов используется обратная косая черта (\). Поддерживаются escape-последовательности, такие как\",\\,\n(новая строка),\t(табуляция),\uXXXX(16-битная кодовая точка Unicode). - Число — может быть целым или с плавающей точкой. Допускается использование экспоненциальной записи (например,
1.5e10). Отсутствуют понятия NaN (Not-a-Number) и бесконечности (Infinity). Ведущие нули перед целой частью (кроме единственного нуля) запрещены. Десятичный разделитель — только точка. - Логическое значение (boolean) —
trueилиfalse. - Null — литерал
null, обозначающий отсутствие значения. - Объект и массив — могут быть вложенными произвольной глубины.
Синтаксические правила
JSON предъявляет строгие требования к форматированию:
- Все строки (ключи и строковые значения) заключаются только в двойные кавычки. Одиночные кавычки не допускаются.
- Между элементами массива и парами объекта используются запятые. Запятая после последнего элемента не допускается.
- Пробельные символы (пробел, табуляция, символы перевода строки и возврата каретки) игнорируются и могут использоваться для форматирования.
- Комментарии не поддерживаются стандартом. Попытки добавления комментариев (например, в виде
//или/ /) делают документ невалидным.
Пример валидного документа JSON
``json { "название": "Пример", "версия": 2.0, "включён": true, "список": [1, 2, 3], "объект": { "ключ": "значение" }, "пустое_поле": null } ``
Отличия от ECMAScript и других форматов
Несмотря на происхождение из JavaScript, JSON в стандарте ECMA-404 является полностью независимым форматом. Основные отличия от литералов объектов JavaScript:
- Ключи объекта обязательно должны быть строками в двойных кавычках. В JavaScript (особенно до ES6) они могли быть идентификаторами без кавычек.
- Комментарии запрещены. В JavaScript комментарии являются частью синтаксиса.
- Числовые значения
NaN,Infinityи-Infinityне поддерживаются. - В стандарте JSON не определены типы данных «дата» или «двоичные данные» — они должны передаваться как строки с согласованным форматом (например, ISO 8601).
По сравнению с XML, JSON обладает меньшей избыточностью, что делает его более компактным и быстрым для разбора. Однако XML поддерживает пространства имён, атрибуты для элементов и схемы валидации (XSD), что даёт ему преимущество в сложных документо-ориентированных системах.
Применение
ECMA-404 нашёл применение в самых разных областях информационных технологий:
Веб-разработка
Наибольшее распространение JSON получил в веб-приложениях как основной формат обмена данными между клиентом (браузером) и сервером. Он лежит в основе RESTful API (Representational State Transfer) и AJAX-запросов. Пример: при отправке формы на сайте сервер может ответить JSON-объектом с результатом операции.
Базы данных
Некоторые системы управления базами данных (СУБД) либо полностью построены на JSON, либо имеют расширенную поддержку этого формата:
- MongoDB и Couchbase — NoSQL-базы, где JSON (в виде BSON — Binary JSON) используется как формат для хранения документов.
- PostgreSQL — реляционная СУБД, имеющая встроенные типы данных
jsonиjsonbдля хранения и запросов к JSON-документам. - MySQL — начиная с версии 5.7, поддерживает нативный тип данных
JSON.
Настройки приложений и конфигурации
JSON часто используется для хранения конфигурационных файлов. Например, проект package.json в экосистеме Node.js или файлы конфигурации для многих современных инструментов (ESLint, Prettier, Webpack).
Телеметрия и логи
Формат применяется для структурированного логирования (например, в формате JSON Lines — каждая строка представляет собой отдельный JSON-объект). Это упрощает автоматизированный анализ логов с помощью инструментов, таких как Logstash (входит в стек ELK — Elasticsearch, Logstash, Kibana).
Критика и ограничения
Несмотря на широкое распространение, ECMA-404 подвергается критике за ряд ограничений:
- Отсутствие поддержки комментариев — затрудняет создание документированных конфигурационных файлов. Для решения этой проблемы были созданы форматы-надстройки, такие как JSONC (JSON with Comments) и JSON5.
- Жёсткое требование использовать двойные кавычки — увеличивает избыточность по сравнению с YAML или TOML, которые допускают более лаконичный синтаксис.
- Отсутствие типов данных «дата», «время» и «двоичные данные» — вынуждает разработчиков вводить дополнительные соглашения, что может приводить к ошибкам несовместимости.
- Потенциальные проблемы с безопасностью — старые реализации JSON-парсеров уязвимы для атак с внедрением кода (например, через использование
eval()для разбора строки), хотя современные парсеры используют безопасные методы.
Стандарт ECMA-404 остаётся одним из наиболее стабильных и простых форматов обмена данными, что обуславливает его повсеместное использование в современных информационных системах.
Источники
- Ecma International. Standard ECMA-404: The JSON Data Interchange Syntax. 2nd edition, December 2017.
- ISO/IEC 21778:2017. Information technology — The JSON data interchange syntax.
- Crockford, D. JSON: The Fat-Free Alternative to XML. 2006.
- Документация MongoDB по формату BSON.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →