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

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 (в виде BSONBinary 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 →