Я хочу вернуть JSON из PHP-скрипта.
Должен ли я просто отправить результат эхом? Должен ли я установить заголовок Content-Type
?
В то время как вы'вновь, как правило, хорошо без него, вы можете и должны установить заголовок типа контента:
<?PHP
$data = /** whatever you're serializing **/;
header('Content-Type: application/json');
echo json_encode($data);
Если я'м не с помощью определенной структуры, обычно я позволю какому-то запросу params, чтобы изменить поведение выходной. Это может быть полезно, как правило, для быстрого устранения неполадок, чтобы не отправлять заголовок, а иногда print_r полезных данных на глаз (хотя в большинстве случаев, он должен'т быть необходимы).
Полный кусок приятный и понятный 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 );
Согласно пособие по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 документация.
Попробуйте json_encode для кодирования данных и установить тип содержимого в заголовке('тип контента: приложение/JSON');`.
Это также хорошо, чтобы установить безопасность доступ - просто заменить * с домена, который вы хотите быть в состоянии добраться до него.
<?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
Как сказали выше:
header('Content-Type: application/json');
сделает работу. но имейте в виду, что :
Аякс будет иметь никаких проблем, чтобы читать в формате JSON, даже если этот заголовок не используется, за исключением, если ваш JSON содержит некоторые HTML-теги. В этом случае вам нужно задать заголовок как application/json-файле.
Убедитесь, что ваш файл не в кодировке utf8-Бом. Этот формат добавить символ в начало файла, так что ваш заголовок() приведет к ошибке.
Ответ на ваш вопрос находится здесь,
Там говорится.
MIME-медиатип для текста JSON - это. application/json.
Так что если вы установите в заголовке этот тип и выведете свою строку JSON, она должна работать.
Да, вам нужно будет использовать echo для отображения вывода. Mimetype: application/json
Если вам нужно получить JSON из PHP с отправкой пользовательских данных, можно добавить этот заголовок('тип контента: приложение/JSON');прежде чем напечатать любую другую вещь, тогда вы можете печатать вы логотипо
Эхо '{"и Монто-то": "'.$monto[0]->valor.'","moneda":"'.$moneda[0]->nombre.'","simbolo":"'.$moneda[0]->simbolo.'"}';`
Это простой 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;
?>
Если вы запрос к базе данных и результирующий набор в формате 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 взглянуть на учебник.
Простой способ отформатировать доменных объектов в 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);
Вы можете использовать этот маленькая библиотека 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();
?>
Простая функция для возврата ответ JSON с код состояния HTTP.
`` json_response функция($данных=значение null, $httpStatus=200) { header_remove();
заголовок("и тип контента: приложение/JSON" - а);
заголовок('статус: ' . $httpStatus);
http_response_code($httpStatus);
Эхо json_encode($данных); } ``
Всякий раз, когда вы пытаетесь вернуть JSON ответ для API или еще убедитесь, что у вас есть правильные заголовки и убедитесь, что вы вернуть корректный JSON-данных.
Вот пример скрипта, который поможет вам вернуть ответ в формате JSON из PHP массива или из файла JSON.
PHP-скрипт (код):
``в PHP <?в PHP
// Установим необходимые заголовки заголовок('тип контента: приложение/JSON; кодировка=кодировка UTF-8'); заголовок('доступ-контроля-позволяет происхождения: *');
/**
// Получить JSON-данные из JSON-файла $JSON с = функции file_get_contents('ответ.в JSON');
// Выход, ответ Эхо $данных 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', '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_encode($json_var); ``
файл JSON (JSON-данные):
``в JSON { "с хэштегом" и: "по HealthMatters" и, и"ИД" и: "и 072b3d65-9168-49fd-а1с1-a4700fc017e0" и, и"настроения " и;: { на "негативный" по: 44, на "положительный" у: 56 }, "по полной" и: "по 3400" и, и"пользователи " и;: [ { на "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: