Files
ave-cms/help/helpers/Json.md
T
2026-07-27 12:58:44 +03:00

2.5 KiB

Json — JSON

App\Helpers\Json — безопасные encode/decode с разумными дефолтами и поддержкой кириллицы.

use App\Helpers\Json;

Кодирование

encode($data, $flags = 0)

Обычное кодирование.

payload($value, $flags = JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES)

Кодирование «для API»: читаемая кириллица, слеши не экранируются. Возвращает null для пустых значений (null, '', []) — удобно, чтобы не гонять пустоту.

echo Json::payload(['title' => 'Кресло', 'price' => 100]);
// {"title":"Кресло","price":100}   ← без \u04..
Json::payload([]);   // null

Декодирование

decode($json, $assoc = true)

По умолчанию — в массив; $assoc = false — в объект.

$data = Json::decode($raw);          // массив
$obj  = Json::decode($raw, false);   // объект

toArray($value, array $default = [])

Гарантированно массив: если уже массив — вернёт как есть, если строка — распарсит, при ошибке — $default. Идеально для JSON-полей БД.

$settings = Json::toArray($row['settings']);          // всегда массив
$tags     = Json::toArray($row['tags'], ['default']);

Вспомогательное

Метод Назначение
show(array $array, $shutdown = false, $cyrillic = false) Вывести JSON (и опц. завершить запрос).
cyrillic($data) Привести экранированную кириллицу к читаемой.
fix($json) Попытка «починить» кривой JSON (одинарные кавычки, мусор).
$data = Json::decode(Json::fix($messyJson));   // last resort для «грязного» входа

Рецепты

Чтение JSON-настроек из строки БД без падений:

$config = Json::toArray($row['config']);
$perPage = isset($config['per_page']) ? (int) $config['per_page'] : 25;

Для полноценного HTTP-ответа удобнее Response::json() — он ставит заголовки и код. Json — про сериализацию как таковую.