Bir PHP komut dosyasından JSON dönmek istiyorum.
Sonucu yankılanıyor muyum? Content-Type
Üstbilgiyi ayarlamam gerekir mi?
Bir PHP komut dosyasından JSON dönmek istiyorum.
Sonucu yankılanıyor muyum? Content-Type
Üstbilgiyi ayarlamam gerekir mi?
Yanıtlar:
Genellikle onsuz iyiyseniz, İçerik Türü başlığını ayarlayabilirsiniz ve ayarlamanız gerekir:
<?PHP
$data = /** whatever you're serializing **/;
header('Content-Type: application/json');
echo json_encode($data);
Belirli bir çerçeve kullanmıyorsam, genellikle çıkış davranışını değiştirmek için bazı istek parametrelerine izin veririm. Genellikle hızlı sorun giderme için bir başlık göndermemek veya bazen veri yükünü göz küresine yazdırmak yararlı olabilir (çoğu durumda gerekli olmamalıdır).
header('Content-type:application/json;charset=utf-8');
JSON döndüren eksiksiz ve güzel bir PHP kodu:
$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 );
Yöntemin üzerindeki kılavuzajson_encode
göre bir dize olmayan ( yanlış ) döndürebilirsiniz :
Başarılı veya başarısız olduğunda JSON kodlu bir dize döndürür
FALSE
.
Bu durumda echo json_encode($data)
, geçersiz JSON olan boş dizeyi çıktılar .
json_encode
false
argümanı UTF-8 olmayan bir dize içeriyorsa , örneğin başarısız olur (ve geri döner ).
Bu hata koşulu PHP'de yakalanmalıdır, örneğin:
<?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(["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;
?>
Daha sonra, alıcı uç elbette, jsonError özelliğinin varlığının, buna göre işlem görmesi gereken bir hata koşulunu gösterdiğini bilmelidir.
Üretim modunda, istemciye yalnızca genel bir hata durumu göndermek ve daha sonra incelenmek üzere daha spesifik hata mesajlarını kaydetmek daha iyi olabilir.
PHP'nin Dokümantasyonundaki JSON hatalarıyla başa çıkma hakkında daha fazla bilgi edinin .
charset
JSON için parametre yok ; sonunda nota bakın tools.ietf.org/html/rfc8259#section-11 : "Hayır 'charset' parametresi bu kayıt için tanımlanan bir ekleme gerçekten uyumlu alıcılara üzerinde hiçbir etkisi yoktur.". (JSON, araçlar başına UTF-8 olarak iletilmelidir.ietf.org/html/rfc8259#section-8.1 , bu yüzden UTF-8 olarak kodlandığını belirtmek biraz gereksizdir.)
charset
başlık HTTP başlık dizesinden kaldırıldı.
Verileri kodlamak ve içerik türünü ayarlamak için json_encode'u deneyin header('Content-type: application/json');
.
Erişim güvenliğini ayarlamak da iyidir - sadece * ulaşmak istediğiniz alan adıyla değiştirin.
<?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);
?>
İşte bununla ilgili daha fazla örnek: Access-Control-Allow-Origin nasıl atlanır?
Yukarıda belirtildiği gibi:
header('Content-Type: application/json');
işi yapacak. ancak şunu unutmayın:
Ajax, bu üstbilgi kullanılmasa bile json'u okumakta zorlanmayacaktır, json'unuzda bazı HTML etiketleri varsa. Bu durumda üstbilgiyi application / json olarak ayarlamanız gerekir.
Dosyanızın UTF8-BOM'da kodlanmadığından emin olun. Bu biçim dosyanın üstüne bir karakter ekler, böylece header () çağrınız başarısız olur.
Basit bir fonksiyon döndürmek için JSON yanıtını ile HTTP durum kodu .
function json_response($data=null, $httpStatus=200)
{
header_remove();
header("Content-Type: application/json");
http_response_code($httpStatus);
echo json_encode($data);
exit();
}
header_remove
ve açıkça http yanıtını ayarlamak iyi bir fikirdir; durum ve ardından http_response ayarı gereksiz görünse de. Ayrıca exit
sonuna bir ifade eklemek isteyebilir . İşlevinizi @trincot ile birleştirdim: stackoverflow.com/a/35391449/339440
Evet, çıktıyı görüntülemek için echo kullanmanız gerekecek. Mimetype: uygulama / json
Eğer php özel bilgi gönderme json almak gerekiyorsa header('Content-Type: application/json');
başka bir şey yazdırmak için önce ekleyebilirsiniz , böylece o zaman size custome yazdırabilirsinizecho '{"monto": "'.$monto[0]->valor.'","moneda":"'.$moneda[0]->nombre.'","simbolo":"'.$moneda[0]->simbolo.'"}';
Bir veritabanını sorgularsanız ve sonuç JSON biçiminde ayarlanırsa, şu şekilde yapılabilir:
<?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 kullanarak sonucu ayrıştırma konusunda yardım için bu eğiticiye bir göz atın .
Bu json.php komut dosyası olarak adlandırılan json değeri herhangi bir rastgele değer olacağı için erkek kadın ve kullanıcı kimliği döndürmek için basit bir PHP betiğidir.
Umarım bu yardım teşekkürler
<?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;
?>
Etki alanı nesnelerinizi JSON olarak biçimlendirmenin kolay bir yolu, Marshal Serializer'ı kullanmaktır . Ardından verileri json_encode
iletin ve ihtiyaçlarınıza uygun İçerik Türü başlığını gönderin. Symfony gibi bir çerçeve kullanıyorsanız, başlıkları manuel olarak ayarlamanıza gerek yoktur. Orada JsonResponse'yi kullanabilirsiniz .
Örneğin, Javascript ile ilgilenmek için doğru İçerik Türü olacaktır application/javascript
.
Ya da bazı oldukça eski tarayıcıları desteklemeniz gerekiyorsa en güvenli olanı olacaktır text/javascript
.
Mobil uygulama gibi diğer tüm amaçlar application/json
için İçerik Türü olarak kullanın .
İşte küçük bir örnek:
<?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);
API için JSON yanıtı döndürmeye çalıştığınızda veya başka uygun başlıklara sahip olduğunuzdan ve geçerli bir JSON verisi döndürdüğünüzden emin olun.
PHP dizisinden veya JSON dosyasından JSON yanıtını döndürmenize yardımcı olan örnek komut dosyası.
PHP Komut Dosyası (Kod):
<?php
// Set required headers
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
/**
* Example: First
*
* Get JSON data from JSON file and retun as JSON response
*/
// Get JSON data from JSON file
$json = file_get_contents('response.json');
// Output, response
echo $json;
/** =. =.=. =.=. =.=. =.=. =.=. =.=. =.=. =.=. =.=. =. */
/**
* Example: Second
*
* Build JSON data from PHP array and retun as JSON response
*/
// Or build JSON data from array (PHP)
$json_var = [
'hashtag' => 'HealthMatters',
'id' => '072b3d65-9168-49fd-a1c1-a4700fc017e0',
'sentiment' => [
'negative' => 44,
'positive' => 56,
],
'total' => '3400',
'users' => [
[
'profile_image_url' => 'http://a2.twimg.com/profile_images/1285770264/PGP_normal.jpg',
'screen_name' => 'rayalrumbel',
'text' => 'Tweet (A), #HealthMatters because life is cool :) We love this life and want to spend more.',
'timestamp' => '{{$timestamp}}',
],
[
'profile_image_url' => 'http://a2.twimg.com/profile_images/1285770264/PGP_normal.jpg',
'screen_name' => 'mikedingdong',
'text' => 'Tweet (B), #HealthMatters because life is cool :) We love this life and want to spend more.',
'timestamp' => '{{$timestamp}}',
],
[
'profile_image_url' => 'http://a2.twimg.com/profile_images/1285770264/PGP_normal.jpg',
'screen_name' => 'ScottMili',
'text' => 'Tweet (C), #HealthMatters because life is cool :) We love this life and want to spend more.',
'timestamp' => '{{$timestamp}}',
],
[
'profile_image_url' => 'http://a2.twimg.com/profile_images/1285770264/PGP_normal.jpg',
'screen_name' => 'yogibawa',
'text' => 'Tweet (D), #HealthMatters because life is cool :) We love this life and want to spend more.',
'timestamp' => '{{$timestamp}}',
],
],
];
// Output, response
echo json_encode($json_var);
JSON Dosyası (JSON DATA):
{
"hashtag": "HealthMatters",
"id": "072b3d65-9168-49fd-a1c1-a4700fc017e0",
"sentiment": {
"negative": 44,
"positive": 56
},
"total": "3400",
"users": [
{
"profile_image_url": "http://a2.twimg.com/profile_images/1285770264/PGP_normal.jpg",
"screen_name": "rayalrumbel",
"text": "Tweet (A), #HealthMatters because life is cool :) We love this life and want to spend more.",
"timestamp": "{{$timestamp}}"
},
{
"profile_image_url": "http://a2.twimg.com/profile_images/1285770264/PGP_normal.jpg",
"screen_name": "mikedingdong",
"text": "Tweet (B), #HealthMatters because life is cool :) We love this life and want to spend more.",
"timestamp": "{{$timestamp}}"
},
{
"profile_image_url": "http://a2.twimg.com/profile_images/1285770264/PGP_normal.jpg",
"screen_name": "ScottMili",
"text": "Tweet (C), #HealthMatters because life is cool :) We love this life and want to spend more.",
"timestamp": "{{$timestamp}}"
},
{
"profile_image_url": "http://a2.twimg.com/profile_images/1285770264/PGP_normal.jpg",
"screen_name": "yogibawa",
"text": "Tweet (D), #HealthMatters because life is cool :) We love this life and want to spend more.",
"timestamp": "{{$timestamp}}"
}
]
}
JSON Screeshot:
Bu küçük PHP kütüphanesini kullanabilirsiniz . Üstbilgileri gönderir ve kolayca kullanmanız için bir nesne verir.
Şöyle görünüyor:
<?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();
?>