Возвращение JSON из PHP-скрипта
Я хочу вернуть JSON из PHP-скрипта.
Достаточно просто использовать echo
для вывода результата? Нужно ли устанавливать заголовок <code>Content-Type</code>
?
5 ответ(ов)
Хотя в большинстве случаев вы можете обойтись без этого, рекомендуется установить заголовок Content-Type
:
<?php
$data = /** данные для сериализации **/;
header('Content-Type: application/json; charset=utf-8');
echo json_encode($data);
Если вы не используете определенный фреймворк, я обычно позволяю некоторым параметрам запроса изменять поведение вывода. Это может быть полезно, в частности для быстрой отладки, иногда не отправлять заголовок или использовать print_r
, чтобы визуально оценить полезную нагрузку данных (хотя в большинстве случаев это не должно быть необходимо).
Полный и понятный пример PHP-кода, который возвращает JSON, выглядит следующим образом:
$option = $_GET['option'];
if ( $option == 1 ) {
$data = [ 'a', 'b', 'c' ];
// будет закодировано в JSON-массив: ["a","b","c"]
// в JavaScript можно получить доступ как: result[1] (возвращает "b")
} else {
$data = [ 'name' => 'God', 'age' => -1 ];
// будет закодировано в JSON-объект: {"name":"God","age":-1}
// в JavaScript можно получить доступ как: result.name или result['name'] (возвращает "God")
}
header('Content-type: application/json');
echo json_encode( $data );
Этот код принимает параметр option
через GET-запрос и в зависимости от его значения формирует массив данных: если option
равно 1, возвращается массив, иначе — ассоциативный массив (объект). Заголовок Content-type
устанавливается на application/json
, чтобы указать, что возвращаемые данные имеют формат JSON. Функция json_encode
используется для преобразования массива в JSON-строку перед отправкой клиенту.
Чтобы установить тип содержимого на application/json
, используйте следующую строку кода:
header('Content-type: application/json');
После этого вы можете вывести ваши данные в формате JSON с помощью функции echo
. Например:
$data = array('key' => 'value', 'number' => 123);
echo json_encode($data);
Таким образом, вы сначала задаете заголовок, а затем отправляете ваши данные в формате JSON. Не забудьте, что функция json_encode
преобразует массив или объект в строку формата JSON.
Вы можете создать простую функцию для возврата JSON-ответа с указанным HTTP статусом следующим образом:
function json_response($data = null, $httpStatus = 200)
{
header_remove(); // Удаляем все заголовки
header("Content-Type: application/json"); // Устанавливаем тип контента как JSON
http_response_code($httpStatus); // Устанавливаем статус HTTP
echo json_encode($data); // Кодируем данные в формат JSON и выводим
exit(); // Завершаем выполнение скрипта
}
Эта функция принимает два параметра: $data
, который может содержать данные, которые вы хотите вернуть в формате JSON, и $httpStatus
, который определяет HTTP статус-код. По умолчанию статус-код установлен на 200, что соответствует успешному запросу. Функция также удаляет все предыдущие заголовки, устанавливает заголовок Content-Type
и кодирует данные в JSON. В конце выполнения скрипт завершается с помощью exit()
.
Если вы хотите вернуть данные в формате JSON с помощью PHP, вы можете использовать следующий пример кода:
<?php
$data = /** ваши данные для сериализации **/; // Замените эту строку на ваши данные
header("Content-type: application/json; charset=utf-8"); // Устанавливаем заголовок для JSON ответа
echo json_encode($data); // Кодируем данные в формат JSON и выводим их
?>
В данном коде сначала определяются данные, которые вы хотите сериализовать в формат JSON. Затем с помощью header
устанавливается заголовок, указывающий, что тип содержимого – JSON. Наконец, с помощью json_encode
данные кодируются в формат JSON и выводятся на экран.
Убедитесь, что ваши данные (в $data
) могут быть правильно закодированы в JSON, иначе функция json_encode
может вернуть false
.
UTF-8 на всех уровнях!
Сортировка двумерного массива по значению в столбце
Как в Node.js "подключить" функции из других файлов?
Что такое потокобезопасность и непотокобезопасность в PHP?
Как прочитать JSON-файл в память сервера?