[英]want to send and receive json data in php
根據應用程序的要求,我正在嘗試開發兩個可以通過Json相互通信的PHP。 我嘗試在線搜索,但沒有找到解決方案。
任何人都可以建議我正確的道路嗎?
我在mysql數據庫中有數據,轉換后的數據將采用json格式,如下所示:(還要查找通過PHP-JSON對象和數組獲取此數據格式的代碼。)
{ "user" : [
{ "firstName" : "Vignesh",
"lastName" : "Prajapati",
"age" : 23,
"email" : ["vignesh@gmail.com","vignesh@yahoo.com"],
"subject" : ["English","Gujarati", "Hindi"]
},
{ "firstName" : "Vaibhav",
"lastName" : "Prajapati",
"age" : 19,
"email" : ["vaibhav@gmail.com","vaibhav@yahoo.com","vaibhav@aol.com"],
"subject" : ["English","Spanish", "Chinese","Sanskrit"]
}
]
}
我發送Json數據的Php代碼:(send.php)
<?php
$data = ' { "user" : [
{ "firstName" : "Vignesh",
"lastName" : "Prajapati",
"age" : 23,
"email" : ["vignesh@gmail.com","vignesh@yahoo.com"],
"subject" : ["English","Gujarati", "Hindi"]
},
{ "firstName" : "Vaibhav",
"lastName" : "Prajapati",
"age" : 19,
"email" : ["vaibhav@gmail.com","vaibhav@yahoo.com","vaibhav@aol.com"],
"subject" : ["English","Spanish", "Chinese","Sanskrit"]
}
]
} ';
$url_send ="http://localhost/rec.php";
$str_data = json_encode($data);
function sendPostData($url, $post){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$result = curl_exec($ch);
curl_close($ch); // Seems like good practice
return $result;
}
echo " " . sendPostData($url_send, $str_data);
?>
我接收Json數據的Php代碼:(rec.php)
<?php
$json_input_data=json_decode(file_get_contents('php://input'),TRUE);
echo $json_input_data;
?>
修改您的函數以在post請求中發送JSON_DATA的標頭
function sendPostData($url, $post){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($post))
);
$result = curl_exec($ch);
curl_close($ch); // Seems like good practice
return $result;
}
在文件中使用
<?php
$json_input_data=json_decode(file_get_contents('php://input'),TRUE);
print_r( $json_input_data);
?>
正如大家所說,不需要$str_data = json_encode($data);
,因為數據已經在json中。
由於如果數據已經是json
格式,則不應使用json_encode
,請將代碼更改為:
$data = array('user' => array(
array('firstName' => 'Vignesh', 'lastName' => 'Prajapati'),
array('firstName' => 'Vaibhav', 'lastName' => 'Prajapati')
));
當然,您還需要將其他字段添加到數組中。
在上面的數據上使用json_encode()
將返回:
{
"user" : [
{
"firstName" : "Vignesh",
"lastName" : "Prajapati"
},
{
"firstName" : "Vaibhav",
"lastName" : "Prajapati"
}
]
}
請記住,JSON表示“對象表示法”,即它是一種在javascript中描述對象的方法。 這是在網絡級別進行通信的好方法,但是當您使用PHP時,您應該使用PHP旨在使用的數據結構。 而不是直接在任何一方使用JSON,尤其是作為大JSON字符串的替代,將數據結構化為數組並在發送之前對其進行編碼。 你使用curl的方法很好,雖然有點習慣 - 有很多很好的路由器可以更好地管理這些類型的請求(symfony是我最喜歡的),但這是一個單獨的問題。
例如,代替你的大字符串,將其表示為:
$data =
[ "user" => [
[ "firstName" => "Vignesh",
"lastName" => "Prajapati",
"age" => 23,
"email" => ["vignesh@gmail.com","vignesh@yahoo.com"],
"subject" => ["English","Gujarati", "Hindi"]
]
等等。當它發送到其他服務器時, json_encode
然后去。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.