मैं JSON को एक PHP स्क्रिप्ट से वापस करना चाहता हूं।
क्या मैं सिर्फ परिणाम की प्रतिध्वनि करता हूं? क्या मुझे Content-Type
हेडर सेट करना है ?
मैं JSON को एक PHP स्क्रिप्ट से वापस करना चाहता हूं।
क्या मैं सिर्फ परिणाम की प्रतिध्वनि करता हूं? क्या मुझे Content-Type
हेडर सेट करना है ?
जवाबों:
जब आप आम तौर पर इसके बिना ठीक होते हैं, तो आपको सामग्री-प्रकार हेडर सेट करना चाहिए और:
<?PHP
$data = /** whatever you're serializing **/;
header('Content-Type: application/json');
echo json_encode($data);
यदि मैं किसी विशेष ढांचे का उपयोग नहीं कर रहा हूं, तो मैं आमतौर पर आउटपुट व्यवहार को संशोधित करने के लिए कुछ अनुरोधों को अनुमति देता हूं। यह उपयोगी हो सकता है, आमतौर पर त्वरित समस्या निवारण के लिए, हेडर नहीं भेजने के लिए, या कभी-कभी डेटा पेलोड को प्रिंट करने के लिए इसे नेत्रगोलक करें (हालांकि ज्यादातर मामलों में, यह आवश्यक नहीं होना चाहिए)।
header('Content-type:application/json;charset=utf-8');
JSON से लौटने वाले अच्छे और स्पष्ट PHP कोड का एक पूरा टुकड़ा है:
$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
अनुसार एक गैर-स्ट्रिंग ( गलत ) वापस कर सकते हैं :
सफलता
FALSE
पर या विफलता पर एक JSON एन्कोडेड स्ट्रिंग लौटाता है ।
जब ऐसा होता है echo json_encode($data)
तो रिक्त स्ट्रिंग को आउटपुट करेगा, जो कि 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(["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 संपत्ति की उपस्थिति एक त्रुटि स्थिति को इंगित करती है, जिसे इसके अनुसार इलाज करना चाहिए।
उत्पादन मोड में ग्राहक को केवल सामान्य त्रुटि स्थिति भेजना और बाद की जांच के लिए अधिक विशिष्ट त्रुटि संदेश लॉग करना बेहतर हो सकता है।
PHP के प्रलेखन में JSON त्रुटियों से निपटने के बारे में और पढ़ें ।
charset
JSON के लिए कोई पैरामीटर नहीं है ; उपकरण के अंत में नोट देखें ।ietf.org / html / rfc8259#section-11 : "इस पंजीकरण के लिए कोई 'चारसेट' पैरामीटर परिभाषित नहीं किया गया है। किसी को जोड़ने से वास्तव में प्राप्तकर्ताओं पर कोई प्रभाव नहीं पड़ता है।" (JSON को UTF-8 प्रति टूल्स.ietf.org/html/rfc8259#section-8.1 के रूप में प्रेषित किया जाना चाहिए , ताकि यह निर्दिष्ट किया जा सके कि यह UTF-8 के रूप में एन्कोड किया गया है। थोड़ा बेमानी है।)
charset
HTTP शीर्ष लेख स्ट्रिंग से अनावश्यक पैरामीटर हटा दिया गया।
डेटा एन्कोड करने के लिए json_encode का प्रयास करें और सामग्री-प्रकार सेट करें header('Content-type: application/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);
?>
यहाँ उस पर अधिक नमूने हैं: एक्सेस-कंट्रोल-अनुमति-उत्पत्ति को कैसे बायपास करें?
जैसा कि ऊपर कहा गया है:
header('Content-Type: application/json');
नौकरी कर लेंगे। लेकिन ध्यान रखें कि:
इस हेडर का उपयोग न करने पर भी Ajax को json पढ़ने में कोई समस्या नहीं होगी, सिवाय इसके कि अगर आपके json में कुछ HTML टैग हैं। इस मामले में आपको हेडर को एप्लिकेशन / जसन के रूप में सेट करना होगा।
सुनिश्चित करें कि आपकी फ़ाइल UTF8-BOM में एन्कोडेड नहीं है। यह प्रारूप फ़ाइल के शीर्ष में एक चरित्र जोड़ता है, इसलिए आपका हेडर () कॉल विफल हो जाएगा।
HTTP स्थिति कोड के साथ JSON प्रतिक्रिया देने के लिए एक सरल कार्य ।
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
, और स्पष्ट रूप से http प्रतिक्रिया सेट करना एक अच्छा विचार है; हालाँकि सेटिंग स्टेटस और फिर http_response बेमानी लगता है। exit
अंत में एक बयान भी जोड़ना चाह सकते हैं । मैंने आपके फ़ंक्शन को @trincot के साथ जोड़ दिया: stackoverflow.com/a/35391449/339440
हाँ, आपको आउटपुट प्रदर्शित करने के लिए इको का उपयोग करना होगा। Mimetype: application / json
यदि आपको php से json प्राप्त करने की आवश्यकता header('Content-Type: application/json');
है, तो कस्टम सूचना भेजने से आप इसे जोड़ सकते हैं, इससे पहले कि आप किसी अन्य चीज़ को प्रिंट कर सकें, तो फिर आप इसे प्रिंट कर सकते हैंecho '{"monto": "'.$monto[0]->valor.'","moneda":"'.$moneda[0]->nombre.'","simbolo":"'.$moneda[0]->simbolo.'"}';
यदि आप किसी डेटाबेस को क्वेरी करते हैं और 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 का उपयोग करके परिणाम को पार्स करने में मदद के लिए इस ट्यूटोरियल को देखें ।
यह पुरुष महिला और उपयोगकर्ता आईडी को वापस करने के लिए एक सरल 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 पर अपने डोमेन ऑब्जेक्ट्स को फॉर्मेट करने का एक आसान तरीका मार्शल सीरियलाइज़र का उपयोग करना है । फिर डेटा को पास करें json_encode
और अपनी आवश्यकताओं के लिए सही सामग्री-प्रकार हेडर भेजें। यदि आप सिम्फनी जैसे ढांचे का उपयोग कर रहे हैं, तो आपको हेडर को मैन्युअल रूप से सेट करने की आवश्यकता नहीं है। वहां आप JsonResponse का उपयोग कर सकते हैं ।
उदाहरण के लिए जावास्क्रिप्ट से निपटने के लिए सही सामग्री-प्रकार होगा application/javascript
।
या अगर आपको कुछ बहुत पुराने ब्राउज़रों का समर्थन करने की आवश्यकता है तो सबसे सुरक्षित होगा text/javascript
।
अन्य सभी उद्देश्यों के लिए जैसे मोबाइल ऐप का उपयोग application/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);
जब भी आप एपीआई के लिए JSON प्रतिक्रिया को वापस करने की कोशिश कर रहे हैं या सुनिश्चित करें कि आपके पास उचित हेडर हैं और यह भी सुनिश्चित करें कि आप एक वैध JSON डेटा लौटाते हैं।
यहां नमूना स्क्रिप्ट है जो आपको PHP सरणी से या JSON फ़ाइल से JSON प्रतिक्रिया को वापस करने में मदद करती है।
PHP स्क्रिप्ट (कोड):
<?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 फाइल (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:
आप इस छोटी सी 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();
?>