Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Формат 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.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.