在使用CURL获取JSON数据后,json_decode返回一个null对象

时间:2013-03-01 14:20:10

标签: php json curl

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, array('Content-type: application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$output = curl_exec($ch);
var_dump($output);
$json_array = json_decode($output, true);

var_dump(curl_error($ch));

curl_close($ch);

var_dump($json_array);

VARDUMP for $ output

string(267)“HTTP / 1.1 200 OK日期:星期五,2013年3月1日14:16:57 GMT服务器:Apache / 2.4.3(Win32)OpenSSL / 1.0.1c PHP / 5.4.7 X-Powered- By:PHP / 5.4.7 cache-control:no-cache x-debug-token:5130b85a178bd Transfer-Encoding:chunked Content-Type:application / json {“name”:“manoj”}“

curl_error($ ch)的VARDUMP

string(0)“”

$ json_array的VARDUMP

NULL

2 个答案:

答案 0 :(得分:7)

  

如果无法解码json,则返回NULL

您不希望在curl_exec的正文中返回标题,因此您需要:

curl_setopt($ch, CURLOPT_HEADER, false)

http://php.net/manual/en/function.json-decode.php

答案 1 :(得分:2)

如果由于任何原因您必须维护CURLOPT_HEADER选项,您可以使用以下内容:

$output = curl_exec($ch);  

$json_data = mb_substr($output, curl_getinfo($ch, CURLINFO_HEADER_SIZE));  
$data = json_decode($json_data);

您可以使用CURLOPT_HEADER选项检查返回代码200,404等...

$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);