Возврат JSON из сценария PHP

Я хочу вернуть JSON из PHP-скрипта.

Должен ли я просто отправить результат эхом? Должен ли я установить заголовок Content-Type?

Решение

В то время как вы'вновь, как правило, хорошо без него, вы можете и должны установить заголовок типа контента:

<?PHP
$data = /** whatever you're serializing **/;
header('Content-Type: application/json');
echo json_encode($data);

Если я'м не с помощью определенной структуры, обычно я позволю какому-то запросу params, чтобы изменить поведение выходной. Это может быть полезно, как правило, для быстрого устранения неполадок, чтобы не отправлять заголовок, а иногда print_r полезных данных на глаз (хотя в большинстве случаев, он должен'т быть необходимы).

Комментарии (10)

Полный кусок приятный и понятный PHP код возвращения JSON-это:

$option = $_GET['option'];

if ( $option == 1 ) {
    $data = [ 'a', 'b', 'c' ];
    // will encode to JSON array: ["a","b","c"]
    // accessed as example in JavaScript like: result[1] (returns "b")
} else {
    $data = [ 'name' => 'God', 'age' => -1 ];
    // will encode to JSON object: {"name":"God","age":-1}  
    // accessed as example in JavaScript like: result.name or result['name'] (returns "God")
}

header('Content-type: application/json');
echo json_encode( $data );
Комментарии (1)

Согласно пособие поjson_encode метод может возвращать не строку (ложь):

возвращает JSON закодированная строка в случае успеха или false в случае неудачи.

Когда это происходит Эхо json_encode($данных) будет выводить пустую строку, которая недопустимый формат JSON.

json_encode будет например не (и возвращать значениеfalse`), если аргумент содержит строку UTF-8.

Эта ошибка должна быть зафиксирована в PHP, например так:

<?php
header("Content-Type: application/json");

// Collect what you need in the $data variable.

$json = json_encode($data);
if ($json === false) {
    // Avoid echo of empty string (which is invalid JSON), and
    // JSONify the error message instead:
    $json = json_encode(array("jsonError", json_last_error_msg()));
    if ($json === false) {
        // This should not happen, but we go all the way now:
        $json = '{"jsonError": "unknown"}';
    }
    // Set HTTP response status code to: 500 - Internal Server Error
    http_response_code(500);
}
echo $json;
?>

Тогда на приемном конце, конечно, должны осознавать, что наличие jsonError свойство указывает состояние ошибки, которое должно лечить соответствующим образом.

В рабочем режиме он может быть лучше, чтобы отправить только общее состояние ошибки клиента и войти в более конкретные сообщения об ошибках для последующего расследования.

Подробнее об обработке ошибок JSON в в PHP's документация.

Комментарии (2)

Попробуйте json_encode для кодирования данных и установить тип содержимого в заголовке('тип контента: приложение/JSON');`.

Комментарии (0)

Установите тип содержимого с помощью header('Content-type: application/json'); и затем передайте данные эхом.

Комментарии (0)

Это также хорошо, чтобы установить безопасность доступ - просто заменить * с домена, который вы хотите быть в состоянии добраться до него.

<?php
header('Access-Control-Allow-Origin: *');
header('Content-type: application/json');
    $response = array();
    $response[0] = array(
        'id' => '1',
        'value1'=> 'value1',
        'value2'=> 'value2'
    );

echo json_encode($response); 
?>

Вот еще образцы о том, что: https://stackoverflow.com/questions/7564832/how-to-bypass-access-control-allow-origin

Комментарии (0)

Как сказали выше:

header('Content-Type: application/json');

сделает работу. но имейте в виду, что :

  • Аякс будет иметь никаких проблем, чтобы читать в формате JSON, даже если этот заголовок не используется, за исключением, если ваш JSON содержит некоторые HTML-теги. В этом случае вам нужно задать заголовок как application/json-файле.

  • Убедитесь, что ваш файл не в кодировке utf8-Бом. Этот формат добавить символ в начало файла, так что ваш заголовок() приведет к ошибке.

Комментарии (0)
<?php
$data = /** whatever you're serializing **/;
header("Content-type: application/json; charset=utf-8");
echo json_encode($data);
?>
Комментарии (0)

Ответ на ваш вопрос находится здесь,

Там говорится.

MIME-медиатип для текста JSON - это. application/json.

Так что если вы установите в заголовке этот тип и выведете свою строку JSON, она должна работать.

Комментарии (0)

Да, вам нужно будет использовать echo для отображения вывода. Mimetype: application/json

Комментарии (0)

Если вам нужно получить JSON из PHP с отправкой пользовательских данных, можно добавить этот заголовок('тип контента: приложение/JSON');прежде чем напечатать любую другую вещь, тогда вы можете печатать вы логотипоЭхо '{"и Монто-то": "'.$monto[0]->valor.'","moneda":"'.$moneda[0]->nombre.'","simbolo":"'.$moneda[0]->simbolo.'"}';`

Комментарии (0)

Это простой PHP-скрипт для возвращения мужской женский и идентификатор пользователя в качестве значения JSON будет быть любое произвольное значение как вы называете сценарий json.php .

Надеюсь, что это поможет спасибо

<?php
header("Content-type: application/json");
$myObj=new \stdClass();
$myObj->user_id = rand(0, 10);
$myObj->male = rand(0, 5);
$myObj->female = rand(0, 5);
$myJSON = json_encode($myObj);
echo $myJSON;
?>
Комментарии (1)

Если вы запрос к базе данных и результирующий набор в формате JSON, это может быть сделано так:

<?php

$db = mysqli_connect("localhost","root","","mylogs");
//MSG
$query = "SELECT * FROM logs LIMIT 20";
$result = mysqli_query($db, $query);
//Add all records to an array
$rows = array();
while($row = $result->fetch_array()){
    $rows[] = $row;
}
//Return result to jTable
$qryResult = array();
$qryResult['logs'] = $rows;
echo json_encode($qryResult);

mysqli_close($db);

?>

Для помощи в разборе результат с помощью jQuery взглянуть на учебник.

Комментарии (0)

Простой способ отформатировать доменных объектов в JSON заключается в использовании Маршал сериализатор. Затем передайте данные для json_encode и отправить правильный заголовок типа содержимого для ваших нужд. При использовании фреймворков, таких как Symfony, вы Дон'т должны заботиться о настройке заголовков вручную. Там можно использовать JsonResponse.

Например правильный тип содержимого для работы с JavaScript будет приложение/JavaScript.

Или если нужно поддержать некоторые довольно старые браузеры безопаснее будет текст/JavaScript.

Для всех других целей, как использовать мобильное приложение приложение/JSON как контент-тип.

Вот небольшой пример:

<?php
...
$userCollection = [$user1, $user2, $user3];

$data = Marshal::serializeCollectionCallable(function (User $user) {
    return [
        'username' => $user->getUsername(),
        'email'    => $user->getEmail(),
        'birthday' => $user->getBirthday()->format('Y-m-d'),
        'followers => count($user->getFollowers()),
    ];
}, $userCollection);

header('Content-Type: application/json');
echo json_encode($data);
Комментарии (0)

Вы можете использовать этот маленькая библиотека PHP. Он отправляет заголовки и дать вам объект, чтобы использовать его легко.

Это выглядит как :

<?php
// Include the json class
include('includes/json.php');

// Then create the PHP-Json Object to suits your needs

// Set a variable ; var name = {}
$Json = new json('var', 'name'); 
// Fire a callback ; callback({});
$Json = new json('callback', 'name'); 
// Just send a raw JSON ; {}
$Json = new json();

// Build data
$object = new stdClass();
$object->test = 'OK';
$arraytest = array('1','2','3');
$jsonOnly = '{"Hello" : "darling"}';

// Add some content
$Json->add('width', '565px');
$Json->add('You are logged IN');
$Json->add('An_Object', $object);
$Json->add("An_Array",$arraytest);
$Json->add("A_Json",$jsonOnly);

// Finally, send the JSON.

$Json->send();
?>
Комментарии (0)

Простая функция для возврата ответ JSON с код состояния HTTP.

`` json_response функция($данных=значение null, $httpStatus=200) { header_remove();

заголовок("и тип контента: приложение/JSON" - а);

заголовок('статус: ' . $httpStatus);

http_response_code($httpStatus);

Эхо json_encode($данных); } ``

Комментарии (0)

Всякий раз, когда вы пытаетесь вернуть JSON ответ для API или еще убедитесь, что у вас есть правильные заголовки и убедитесь, что вы вернуть корректный JSON-данных.

Вот пример скрипта, который поможет вам вернуть ответ в формате JSON из PHP массива или из файла JSON.

PHP-скрипт (код):

``в PHP <?в PHP

// Установим необходимые заголовки заголовок('тип контента: приложение/JSON; кодировка=кодировка UTF-8'); заголовок('доступ-контроля-позволяет происхождения: *');

/**

  • Пример: Первый
  • Получить JSON-данные из файла JSON и вернуть в качестве ответа JSON */

// Получить JSON-данные из JSON-файла $JSON с = функции file_get_contents('ответ.в JSON');

// Выход, ответ Эхо $данных JSON;

/* =. =.=. =.=. =.=. =.=. =.=. =.=. =.=. =.=. =.=. =. /

/**

  • Пример: Второй
  • Сборки данных JSON из PHP массива и вернуть в качестве ответа JSON */

// Или построить JSON-данные из массива (на PHP) $json_var = [ 'хэштег' => 'HealthMatters', 'ид' => '072b3d65-9168-49fd-а1с1-a4700fc017e0', 'настроений' => [ 'минус' => 44, 'позитивный' => 56, ], 'общая' => '3400', 'пользователей' => [ [ 'profile_image_url' => 'http://a2.twimg.com/profile_images/1285770264/PGP_normal.jpg&#39;, 'screen_name' => 'rayalrumbel', 'текст' => 'чирикать (а), #HealthMatters потому что жизнь-это круто :) мы любим эту жизнь и хочу провести более.', 'метка' => '{{$метка времени}}', ], [ 'profile_image_url' => 'http://a2.twimg.com/profile_images/1285770264/PGP_normal.jpg&#39;, 'screen_name' => 'mikedingdong', 'текст' => 'чирикать (Б), #HealthMatters потому что жизнь-это круто :) мы любим эту жизнь и хочу провести более.', 'метка' => '{{$метка времени}}', ], [ 'profile_image_url' => 'http://a2.twimg.com/profile_images/1285770264/PGP_normal.jpg&#39;, 'screen_name' => 'ScottMili', 'текст' => 'твит (с) #HealthMatters потому что жизнь-это круто :) мы любим эту жизнь и хочу провести более.', 'метка' => '{{$метка времени}}', ], [ 'profile_image_url' => 'http://a2.twimg.com/profile_images/1285770264/PGP_normal.jpg&#39;, 'screen_name' => 'yogibawa', 'текст' => 'чирикать (Д), #HealthMatters потому что жизнь-это круто :) мы любим эту жизнь и хочу провести более.', 'метка' => '{{$метка времени}}', ], ], ];

// Выход, ответ Эхо json_encode($json_var); ``

файл JSON (JSON-данные):

``в JSON { "с хэштегом" и: "по HealthMatters" и, и"ИД" и: "и 072b3d65-9168-49fd-а1с1-a4700fc017e0" и, и"настроения &quot и;: { на "негативный" по: 44, на "положительный" у: 56 }, "по полной" и: "по 3400" и, и"пользователи &quot и;: [ { на "profile_image_url" и: "и http://a2.twimg.com/profile_images/1285770264/PGP_normal.jpg", на "screen_name-то": "по rayalrumbel" и, и"текст" и: "в Твиттере (а), #HealthMatters потому что жизнь-это круто :) мы любим эту жизнь и хочу провести более.&я на "метки" и: " и{{$метка времени}}"и }, { на "profile_image_url" и: "и http://a2.twimg.com/profile_images/1285770264/PGP_normal.jpg", на "screen_name-то": "по mikedingdong" и, и"текст" и: "в Твиттере (Б), #HealthMatters потому что жизнь-это круто :) мы любим эту жизнь и хочу провести более.&я на "метки" и: " и{{$метка времени}}"и }, { на "profile_image_url" и: "и http://a2.twimg.com/profile_images/1285770264/PGP_normal.jpg", на "screen_name-то": "по ScottMili" и, и"текст" и: "в Твиттере (с) #HealthMatters потому что жизнь-это круто :) мы любим эту жизнь и хочу провести более.&я на "метки" и: " и{{$метка времени}}"и }, { на "profile_image_url" и: "и http://a2.twimg.com/profile_images/1285770264/PGP_normal.jpg", на "screen_name-то": "по yogibawa" и, и"текст" и: "в Твиттере (г), #HealthMatters потому что жизнь-это круто :) мы любим эту жизнь и хочу провести более.&я на "метки" и: " и{{$метка времени}}"и } ] }

``

в JSON Screeshot:

Комментарии (0)