根据应用程序的要求,我正在尝试开发两个可以通过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;
?>
答案 0 :(得分:2)
修改您的函数以在post 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中。
答案 1 :(得分:1)
如果数据已经采用json_encode
格式,则不应使用json
,请将代码更改为:
$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"
}
]
}
答案 2 :(得分:1)
请记住,JSON表示“对象表示法”,即它是一种在javascript中描述对象的方法。这是在网络级别进行通信的好方法,但是当您使用PHP时,您应该使用PHP旨在使用的数据结构。而不是直接在任何一方使用JSON,尤其是作为大JSON字符串的替代,将数据结构化为数组并在发送之前对其进行编码。你使用curl的方法很好,虽然有点习惯 - 有很多很好的路由器可以更好地管理这些类型的请求(symfony是我最喜欢的),但这是一个单独的问题。
e.g。而不是你的大字符串,代表它:
$data =
[ "user" => [
[ "firstName" => "Vignesh",
"lastName" => "Prajapati",
"age" => 23,
"email" => ["vignesh@gmail.com","vignesh@yahoo.com"],
"subject" => ["English","Gujarati", "Hindi"]
]
等。
到了将时间发送到其他服务器时,json_encode
并转到。