Формат JSON
JSON — текстовый формат для обмена данными. В нём отдают ответы серверы, хранят настройки программы, в нём общаются между собой сайт и приложение. PHP умеет превращать массивы в JSON и обратно.
Массив в JSON
Функция json_encode() превращает значение в строку JSON:
<?php
echo json_encode(['name' => 'Anna', 'age' => 25]);Ассоциативный массив становится объектом в фигурных скобках, а обычный список — массивом в квадратных.
Кириллица и читаемый вид
По умолчанию русские буквы заменяются кодами вида А. Флаг JSON_UNESCAPED_UNICODE оставляет их как есть, а JSON_PRETTY_PRINT добавляет отступы:
<?php
$user = ['name' => 'Анна', 'tags' => ['php', 'js']];
echo json_encode($user, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);Флаги объединяют вертикальной чертой.
JSON в массив
Обратное преобразование выполняет json_decode(). Второй аргумент true означает «вернуть ассоциативный массив»:
<?php
$json = '{"name": "Анна", "age": 25}';
$user = json_decode($json, true);
echo $user['name']; // АннаОшибки разбора
Если строка не является правильным JSON, json_decode() молча возвращает null. С флагом JSON_THROW_ON_ERROR функция вместо этого бросает исключение:
<?php
try {
json_decode('{это не JSON}', true, 512, JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
echo 'Не удалось разобрать данные';
}Число 512 — допустимая глубина вложенности; это значение по умолчанию, его приходится указать, чтобы добраться до четвёртого аргумента.
Хранение в файле
JSON удобно сочетать с файлами: массив превращают в строку и записывают, а при чтении превращают обратно:
<?php
$file = sys_get_temp_dir() . '/settings.json';
file_put_contents($file, json_encode(['theme' => 'dark', 'fontSize' => 16]));
$settings = json_decode(file_get_contents($file), true);
echo $settings['theme']; // darkЧастая ошибка
Без второго аргумента true функция json_decode() возвращает не массив, а объект. Обращение к нему в квадратных скобках — $user['name'] — вызовет ошибку. Либо передавайте true, либо обращайтесь к свойствам через стрелку: $user->name.