Работа с JSON

Вывести массив или объект в формате JSON можно через функцию json_encode().

$array = [
    'lang' => 'PHP',
    'version' => '8.0.9'
];

json_encode($array); // {"lang":"PHP","version":"8.0.9"}

Данные в формате JSON можно хранить, например, в файлах или в базе данных.

Функция json_encode() кодирует Юникод, т.е. русский текст преобразуется например в «\u0442\u0435». Чтобы данные возвращались в исходном виде, то добавляют параметр JSON_UNESCAPED_UNICODE (доступна с версии PHP 5.4).

$data = ['City' => 'Москва'];

json_encode($data); // {"City":"\u041c\u043e\u0441\u043a\u0432\u0430"}
json_encode($data, JSON_UNESCAPED_UNICODE); // {"City":"Москва"}

Преобразовать JSON в объект можно через функцию json_decode().

$json = json_decode('{"lang":"PHP","version":"8.0.9"}');

$json->lang;    // PHP
$json->version; // 8.0.9

Если в json_encode() будет передан пустой массив, то функция вернёт ответ в виде массива (т.е. не в формате JSON). В этой ситуации надо добавить параметр JSON_FORCE_OBJECT.

json_encode([]); // []

json_encode([], JSON_FORCE_OBJECT); // {}

Вывести страницу как JSON

Если на странице выводится только JSON, то рекомендуется указывать заголовок «application/json». Данный заголовок позволит браузерам и приложениям обрабатывать текст как JSON.

// Вывести текущую страницу как JSON
header('Content-Type: application/json');

$array = [
    'lang' => 'PHP',
    'framework' => [
        'name' => 'Yii',
        'version' => 2
    ]
];

echo json_encode($array);

В браузере Firefox страница в формате JSON будет показываться как на картинке ниже:

JSON в Firefox

Если бы не был задан заголовок «application/json», то Firefox вывел бы просто текст.

Также когда в JavaScript идёт запрос на страницу в формате JSON, то JavaScript уже получит данные в формате JSON (т.е. преобразовывать строку в JSON не нужно).

Комментарии

Авторизуйтесь, чтобы добавлять комментарии