Безопасная работа с JSON через Bitrix\Main\Web\Json
Проблема
При работе с JSON в 1С-Битрикс многие разработчики используют нативные функции json_encode() и json_decode() без должной обработки ошибок. Это приводит к silent-ошибкам: когда данные не кодируются корректно, функция возвращает false или null, но код продолжает выполняться. В результате возникают сложно диагностируемые проблемы с невалидными данными.
Решение
Класс Bitrix\Main\Web\Json предоставляет безопасные методы для работы с JSON, автоматически выбрасывая исключения при ошибках кодирования/декодирования.
Базовое использование
use Bitrix\Main\Web\Json;
use Bitrix\Main\ArgumentException;
// Безопасное кодирование
try {
$jsonString = Json::encode($data);
} catch (ArgumentException $e) {
// Обработка ошибки кодирования
}
// Безопасное декодирование
try {
$array = Json::decode($jsonString);
} catch (ArgumentException $e) {
// Обработка ошибки декодирования
}
Преимущества класса
Класс автоматически использует оптимальные опции по умолчанию:
JSON_HEX_TAG,JSON_HEX_AMP,JSON_HEX_APOS,JSON_HEX_QUOT— защита от XSSJSON_UNESCAPED_UNICODE— корректная работа с кириллицейJSON_INVALID_UTF8_SUBSTITUTE— замена невалидных символов UTF-8JSON_THROW_ON_ERROR— автоматический выброс исключений
Валидация JSON
Класс предоставляет метод для проверки валидности JSON-строки:
use Bitrix\Main\Web\Json;
use Bitrix\Main\Application;
$request = Application::getInstance()->getContext()->getRequest();
$jsonString = $request->getPost('json_data') ?? '';
if (!Json::validate($jsonString)) {
throw new \Bitrix\Main\ArgumentException(
"Невалидный JSON в параметре json_data"
);
}
$data = Json::decode($jsonString);
Кастомные опции кодирования
Вы можете переопределить опции при необходимости:
use Bitrix\Main\Web\Json;
// Форматированный вывод с отступами
$prettyJson = Json::encode(
$data,
Json::DEFAULT_OPTIONS | JSON_PRETTY_PRINT
);
// Без экранирования слешей для URL
$jsonForApi = Json::encode(
['url' => 'https://example.com/path'],
Json::DEFAULT_OPTIONS | JSON_UNESCAPED_SLASHES
);
Итог
Использование Bitrix\Main\Web\Json вместо нативных функций обеспечивает явную обработку ошибок и автоматическую защиту от XSS. Метод validate() позволяет безопасно проверять пользовательский ввод перед декодированием.