Блог Горошко Андрея 1C-Битрикс Работа с JSON в D7: Класс Bitrix\Main\Web\Json и его преимущества

Работа с JSON в D7: Класс Bitrix\Main\Web\Json и его преимущества

Средний рейтинг
Еще нет оценок

PHP имеет встроенные функции для работы с JSON, но в Битрикс D7 есть свой класс-обертка \Bitrix\Main\Web\Json, который рекомендуется использовать в рамках фреймворка.

Преимущества Bitrix\Main\Web\Json

  1. Обработка ошибок: Метод decode выбрасывает исключение ArgumentException при ошибке парсинга, в то время как старый json_decode просто возвращал null (до PHP 7.3). Это позволяет сразу ловить ошибки.
  2. Кодировка: Метод encode автоматически конвертирует данные в UTF-8 перед кодированием (если сайт работает в cp1251), так как JSON обязан быть в UTF-8. Стандартный json_encode вернет пустую строку или ошибку на кириллице в cp1251.
  3. Дефолтные настройки: 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 ошибок.

Мой рейтинг:

Добавить комментарий

Related Post

Обработка ошибок и исключений в D7: Класс Bitrix\Main\Diag\ExceptionHandler и SystemExceptionОбработка ошибок и исключений в D7: Класс Bitrix\Main\Diag\ExceptionHandler и SystemException

Средний рейтинг Еще нет оценок Старый подход «вернуть false и записать ошибку в LAST_ERROR» уходит в прошлое. В D7 используется механизм исключений (Exceptions), который делает код более надежным и предсказуемым. 1. Иерархия исключений

CUserOptions: Сохранение личных настроек интерфейса пользователяCUserOptions: Сохранение личных настроек интерфейса пользователя

Средний рейтинг Еще нет оценок Как запомнить, что пользователь свернул этот блок? Или что он выбрал режим отображения «Плиткой», а не «Списком»? Для хранения таких мелких интерфейсных настроек, привязанных к

Передача данных из PHP в JavaScript: CUtil::PhpToJSObjectПередача данных из PHP в JavaScript: CUtil::PhpToJSObject

Средний рейтинг Еще нет оценок Частая задача: передать конфигурацию, переводы или данные из компонента ($arResult) в JavaScript-файл (script.js). Новички часто пишут echo json_encode($arResult), но в Битрикс есть более специализированный инструмент. Метод CUtil::PhpToJSObject($data,