有的时候我们使用php curl发送请求后,返回的是一串json值,如何获取这段json的数据呢?
要知道,我们用$_POST['any']
或$_GET['any']
平常获取的数值是需要对应的key
值的,而纯json并没有一个key值来让我们获取,那么我们应该怎么做才能获取呢?
php://input
赋值变量即可$post = json_decode(json_decode(file_get_contents('php://input')));
两次decode是因为获取的字符串经过了转义,出现了很多斜杠,如
[{\"ID\":\"99d2a341-ea2e-4f04-b4f4-623153d64336\",\"Name\":\"王五\",\"TotalScores\":80,\"工作效率\":\"B\",\"职业道德\":\"B\",\"业务能力\":\"A\",\"链接自律\":\"B\",\"工作成绩\":\"B\"},
{\"ID\":\"728f72ac-473b-4bde-bf83-7ed93d3fd9e6\",\"Name\":\"李四\",\"TotalScores\":80,\"工作效率\":\"B\",\"职业道德\":\"B\",\"业务能力\":\"A\",\"链接自律\":\"B\",\"工作成绩\":\"B\"},
{\"ID\":\"29c80443-d0ac-414c-91b5-acd5e69e28f2\",\"Name\":\"刘七\",\"TotalScores\":80,\"工作效率\":\"B\",\"职业道德\":\"B\",\"业务能力\":\"A\",\"链接自律\":\"B\",\"工作成绩\":\"B\"}]
假设我们获取的json为
{
"status": {
"code": "200",
"url": "www.jisuying.com",
"title": "阿瑟斯"
}
}
以上面的例子为例
在面向对象
的php代码中
有的时候无法通过$array['key']
来获取json内的具体字典值
需要使用$var1 = $array->key
来获取数据,如
//原本用这种无法获取
$code = $post['status']['code']; //200
//现在用箭头可以获取
$code = $post->status->code; //200
这样就能获得具体的值了
由于php是在服务端进行网络请求,相关信息不会显示在前端的chrome网络调试中
所以在调试php网络请求的时候就需要暴露具体的过程
在curl语句里面加上这么一条,返回的内容就会有具体的调试值
//调试curl
if (!curl_errno($curl)) {
print_r(curl_getinfo($curl));
}
附封装好的php curl的get和post请求函数
/**
* @function 封装curlpost方法
* @param string $url 发送请求的地址
* @param string $data 要发送的数据
* @param string $type 要发送的类型,例如json
* @author Andy 改自我也不知道哪里来的代码
* @return $res 返回数据
*/
public function postCurl($url,$data,$type='')
{
if($type == 'json'){
$data = json_encode($data);//对数组进行json编码
$header= array("Content-type: application/json;charset=UTF-8","Accept: application/json","Cache-Control: no-cache", "Pragma: no-cache");
}else{
$header= array("Content-type: application/x-www-form-urlencoded;charset=UTF-8");
}
$curl = curl_init();
curl_setopt($curl,CURLOPT_URL,$url);
curl_setopt($curl,CURLOPT_POST,1);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,false);
if(!empty($data)){
curl_setopt($curl,CURLOPT_POSTFIELDS,$data);
}
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl,CURLOPT_HTTPHEADER,$header);
$res = curl_exec($curl);
if(curl_errno($curl)){
echo 'Error+'.curl_error($curl);
}
//调试curl
// if (!curl_errno($curl)) {
// print_r(curl_getinfo($curl));
// }
curl_close($curl);
return $res;
}
/**
* @function 封装curlget方法
* @param string $url 发送请求的地址
* @author Andy 改自我也不知道哪里来的代码
* @return $data 返回解码的json数据
*/
public function curl_get($url)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
return json_decode($data);//对数据进行json解码
}