PHP имеет встроенные функции для работы с JSON, но в Битрикс D7 есть свой класс-обертка \Bitrix\Main\Web\Json, который рекомендуется использовать в рамках фреймворка.
Преимущества Bitrix\Main\Web\Json
- Обработка ошибок: Метод decode выбрасывает исключение ArgumentException при ошибке парсинга, в то время как старый json_decode просто возвращал null (до PHP 7.3). Это позволяет сразу ловить ошибки.
- Кодировка: Метод encode автоматически конвертирует данные в UTF-8 перед кодированием (если сайт работает в cp1251), так как JSON обязан быть в UTF-8. Стандартный json_encode вернет пустую строку или ошибку на кириллице в cp1251.
- Дефолтные настройки: encode по умолчанию использует флаг JSON_HEX_TAG|JSON_HEX_AMP|…, защищая от XSS при вставке JSON в HTML.
Примеры использования
Кодирование (Array -> JSON):
use Bitrix\Main\Web\Json;
$data = [
'name' => 'Иван',
'active' => true,
'link' => '<a href="#">Link</a>' // Будет экранировано
];
try {
// encode($data, $options = null)
$jsonString = Json::encode($data);
echo $jsonString;
} catch (\Bitrix\Main\ArgumentException $e) {
echo "Ошибка кодирования: " . $e->getMessage();
}Декодирование (JSON -> Array):
use Bitrix\Main\Web\Json;
$json = '{"name": "Иван", "id": 1}';
$badJson = '{error}';
try {
// decode($data)
$result = Json::decode($json);
print_r($result);
$result2 = Json::decode($badJson); // Выбросит исключение
} catch (\Bitrix\Main\ArgumentException $e) {
// Ловим ошибку синтаксиса JSON
echo "Некорректный JSON: " . $e->getMessage();
}Вывод:
Класс Bitrix\Main\Web\Json — это безопасная и надежная альтернатива нативным функциям, особенно на проектах в кодировке windows-1251.
Он гарантирует валидный UTF-8 JSON на выходе и понятные исключения при ошибках на входе.
Bitrix JSON, Web\Json, json_encode битрикс, json_decode, JSON_UNESCAPED_UNICODE, обработка json ошибок.