PHP将Curl返回的JSON字符串转为数组失败问题求助
问题分析与解决方案
你的问题核心在于**$response包含了HTTP响应头和JSON内容的混合字符串**,而json_decode只能解析纯JSON格式的内容,导致解码失败返回null,直接echo null自然就显示空白了,加上你可能没开启PHP错误提示,所以连报错都看不到。
解决步骤:
1. 分离响应头与JSON内容
你设置了CURLOPT_HEADER => 1,所以curl会把HTTP响应头和响应体一起返回。有两种处理方式:
方式一:关闭响应头返回(推荐,如果你不需要响应头)
直接把CURLOPT_HEADER设为false,这样curl_exec返回的就只有纯JSON内容了:
# 修改这一行 curl_setopt($ch, CURLOPT_HEADER, false); // 后续解码代码 $response = curl_exec($ch); curl_close($ch); $result = json_decode($response, true); // 用print_r或var_dump查看数组内容,echo数组只会显示"Array" print_r($result);
方式二:保留响应头,手动分离出JSON体
如果你需要保留响应头信息,可以通过字符串分割提取出JSON部分(HTTP头和体之间通常用\r\n\r\n分隔):
$response = curl_exec($ch); curl_close($ch); // 分割头和体 $separator = "\r\n\r\n"; $parts = explode($separator, $response, 2); $headers = $parts[0]; $json_body = $parts[1]; // 解码JSON $result = json_decode($json_body, true); // 查看解码结果 print_r($result);
2. 开启错误提示排查问题
在代码开头加上以下代码,方便后续排查类似问题:
error_reporting(E_ALL); ini_set('display_errors', 1);
这样如果json_decode失败,你能看到具体的错误信息,也可以用json_last_error_msg()查看解码失败的原因:
$result = json_decode($json_body, true); if (json_last_error() !== JSON_ERROR_NONE) { echo 'JSON解码错误:' . json_last_error_msg(); }
3. 正确输出数组内容
注意:直接echo $result是不行的,因为$result是数组,echo数组只会输出Array字符串。你需要用print_r($result)或者var_dump($result)来查看数组的具体内容。
额外提示
你提供的响应内容开头还有一个奇怪的字符锘縶,这可能是编码问题(比如UTF-8 BOM),如果分割后解码还是失败,可以尝试用trim()去除JSON体前后的空白字符:
$json_body = trim($parts[1]);
内容的提问来源于stack exchange,提问作者CNowa
相关产品推荐
相关产品推荐

