Перейти к содержимому
создание сайта joomla

JSON

JSON (JavaScript Object Notation — «нотация объектов JavaScript») — это общепризнанный международный текстовый формат обмена и хранения структурированных данных, стандартизированный спецификациями RFC 8259 и ECMA-404. Разработанный Дугласом Крокфордом в начале 2000-х годов как компактная и легковесная альтернатива XML, формат стал де-факто фундаментом веб-коммуникаций: он используется в интерфейсах RESTful API, протоколах авторизации JWT, семантической разметке Schema.org (JSON-LD), нативных JSON-типах современных СУБД (MySQL, PostgreSQL) и файлах конфигурации.

История создания, философия и международные стандарты

В конце 1990-х и начале 2000-х годов доминирующим стандартом обмена данными в корпоративных веб-сервисах был XML. Однако его громоздкость порождала проблемы:

  • Кризис XML-синтаксиса: бесконечные парные теги (<item>...</item>) раздували объем передаваемого по сети трафика в разы, а парсинг через громоздкие DOM/SAX-парсеры создавал высокую нагрузку на процессор.
  • Идея Дугласа Крокфорда (2001 год): предложить минималистичный текстовый формат на основе нотации литералов объектов языка JavaScript (ECMAScript 3), понятный человеку и мгновенно разбираемый машиной без специализированных библиотек.
  • Стандартизация: формат закреплен стандартами RFC 8259, ECMA-404 и ISO/IEC 21778:2017. Официальный MIME-тип — application/json, кодировка по умолчанию — UTF-8.
  • Языковая независимость: несмотря на название, JSON является платформонезависимым форматом. Сегодня высокоскоростные библиотеки для парсинга и сериализации JSON встроены во все языки программирования (PHP, Python, Go, C#, Java).

Синтаксическая модель и 6 базовых типов данных

Спецификация JSON намеренно лаконична и включает всего шесть универсальных типов данных, комбинируемых в любые структуры:

Базовые строительные блоки формата JSON:

Объект (Object): неупорядоченный набор пар «ключ-значение», заключенный в фигурные скобки { "ключ": значение }. Имена ключей обязаны быть строками в двойных кавычках.
Массив (Array): упорядоченный список значений в квадратных скобках [ 1, "текст", true ].
Строка (String): последовательность Unicode-символов в двойных кавычках с поддержкой экранирования (кавычки, слеши, управляющие символы перевода строк).
Число (Number): целые и вещественные числа (42, 3.14, 1e-5) без различия типов.
Логический тип (Boolean): строгие литералы в нижнем регистре true или false.
Нулевое значение (Null): специальный литерал отсутствия значения null.

Строгие ограничения: в стандартном JSON категорически запрещены одинарные кавычки, комментарии (//), функции, значение undefined и висячие запятые (trailing commas) в конце списков.

JSON vs XML, YAML и бинарные протоколы (Protobuf)

Сравнение форматов объясняет, почему именно JSON завоевал статус базового языка веб-интернета и REST API:

Сопоставление форматов сериализации данных:

JSON против XML: JSON на 30–60% компактнее за счет отсутствия закрывающих тегов, значительно быстрее парсится и нативно мапится в структуры данных языков программирования без сложных XSLT-трансформаций.
JSON против YAML: YAML превосходен для конфигурационных файлов благодаря поддержке комментариев и удобному синтаксису, но парсится в 10–20 раз медленнее JSON и уязвим к ошибкам отступов при сетевой передаче.
JSON против Protocol Buffers / MessagePack: бинарные протоколы компактнее и быстрее в высоконагруженных микросервисах (gRPC), однако требуют компиляции схем и лишены человекочитаемости, необходимой для веб-отладки.

Идеальный баланс простоты отладки в браузерной консоли и скорости парсинга закрепил за JSON лидерство в клиент-серверном взаимодействии.

Работа с JSON в языках веб-разработки: PHP и JavaScript

В бэкенд- и фронтенд-разработке преобразование структур данных в текстовый JSON и обратно стандартизировано на уровне ядер языков:

  • JavaScript: нативные методы JSON.stringify(data) (сериализация) и JSON.parse(str) (десериализация). Поддерживают функции-трансформеры (replacer и reviver) для фильтрации полей и конвертации дат.
  • PHP 8+: функция json_encode($array, JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR) преобразует массивы в валидный JSON без искажения кириллицы и с выбросом исключений JsonException при сбоях.
  • Парсинг в ассоциативные массивы: вызов json_decode($json, true, 512, JSON_THROW_ON_ERROR) с флагом true декодирует объекты в нативные ассоциативные массивы PHP вместо стандартных объектов stdClass.
  • Ограничение глубины рекурсии: параметр глубины стека (по умолчанию 512 уровней) защищает стек вызовов PHP от переполнения при атаках с глубоко вложенными структурами.

Нативная поддержка JSON в реляционных СУБД (MySQL и MariaDB)

Начиная с MySQL 5.7 и 8.0, реляционные базы данных поддерживают нативный тип данных JSON, объединяя надежность SQL с гибкостью NoSQL:

Преимущества нативного типа данных JSON в MySQL:

Бинарный формат хранения: документы JSON сохраняются в оптимизированном внутреннем формате, позволяющем серверу считывать конкретные вложенные поля без парсинга всей текстовой строки.
Операторы поиска по путям (JSON Path): стрелочные операторы -> (извлечение с кавычками) и ->> (извлечение чистого значения) для запросов вида SELECT data->>'$.user.email' FROM orders;.
Функциональные индексы: виртуальные генерируемые колонки (Generated Columns) на базе JSON-свойств позволяют вешать стандартные B-Tree индексы на отдельные поля JSON-документов, обеспечивая миллисекундный поиск среди миллионов строк.

В CMS Joomla нативные JSON-поля широко используются для хранения кастомных полей (Custom Fields), конфигураций расширений и гибких параметров макетов.

Безопасность, валидация по JSON Schema и защита от атак

Обработка внешних JSON-данных требует строгого соблюдения правил информационной безопасности:

  • Спецификация JSON Schema: стандарт формального описания и декларативной валидации структуры JSON-документов. Позволяет автоматически проверять типы данных, диапазоны значений и обязательные поля в API-запросах.
  • Защита от XSS-инъекций: при прямой вставке JSON в HTML-код страницы (например, в переменные скриптов) необходимо экранировать теги (флаг JSON_HEX_TAG в PHP), чтобы предотвратить внедрение вредоносных тегов <script>.
  • Уязвимость Prototype Pollution: в JavaScript-окружении (Node.js) небезопасное слияние невалидированных JSON-объектов со служебными ключами __proto__ или constructor может скомпрометировать глобальный прототип объекта.
  • Экосистема стандартов: JSON стал фундаментом для криптографических веб-токенов JWT (аутентификация в API), семантической разметки JSON-LD (Schema.org) и манифестов ассетов CMS Joomla (joomla.asset.json).

создание сайта

JSON, JavaScript

ОГЛАВЛЕНИЕ