You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:04:48