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

PHP中将API返回的JSON响应转换为数组的问题

解决json_decode返回空的问题并正确转换为PHP数组

我之前也碰到过类似的情况,大概率是JSON格式存在隐藏问题,或者解码过程中的错误没被捕获到,咱们一步步排查解决:

1. 捕获解码错误,定位问题根源

首先,不要直接忽略json_decode的返回值,用json_last_error_msg()来查看具体的错误原因,这能帮你快速定位问题:

// 假设$response是你从API获取到的JSON字符串
$decoded = json_decode($response, true);

if ($decoded === null) {
    // 打印具体错误信息
    echo 'JSON解码错误:' . json_last_error_msg();
    exit;
}

常见的错误包括:JSON语法错误、UTF-8 BOM头干扰、字符串包含不可见控制字符等。

2. 处理UTF-8 BOM头问题

很多时候API返回的JSON会带有UTF-8 BOM(开头的三个不可见字符\xEF\xBB\xBF),这会导致json_decode直接返回null。可以用正则去除BOM头:

// 去除UTF-8 BOM头
$response = preg_replace('/^\x{EF}\x{BB}\x{BF}/u', '', $response);
// 再进行解码
$decoded = json_decode($response, true);

3. 确认API响应的正确性

先确保你获取到的$response是完整且正确的JSON字符串,而不是空值或者错误内容。可以用var_dump($response)打印出来检查:

var_dump($response);
// 正常情况下应该输出类似:string(xxx) "{"logs": [["2018-05-22 00:10:16", "Billed"]], ...}"

如果使用curl获取API响应,记得检查curl是否执行成功:

$ch = curl_init('你的API接口地址');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 如果API需要HTTPS,可临时添加以下选项跳过证书验证(生产环境建议配置合法证书)
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

$response = curl_exec($ch);

// 检查curl是否出错
if (curl_errno($ch)) {
    echo 'Curl请求错误:' . curl_error($ch);
    curl_close($ch);
    exit;
}
curl_close($ch);

4. 验证解码后的数组使用

当解码成功后,你就可以正常通过键名访问字段,并且遍历logs数组了:

// 访问单个字段
echo '订阅日期:' . $decoded['subdate']; // 输出:2018-05-08 14:18:18

// 遍历logs数组
echo '<h3>日志列表</h3>';
foreach ($decoded['logs'] as $logItem) {
    echo '时间:' . $logItem[0] . ',状态:' . $logItem[1] . '<br>';
}

内容的提问来源于stack exchange,提问作者Valar M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:41:14