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

PHP调用json_decode解析API返回值时报Trying to access array offset错误如何解决

错误原因

该报错的核心是json_decode()执行后返回了null,你尝试访问null['status']触发了类型错误。json_decode返回null通常有两个原因:

  • 传入的待解析内容不是合法的JSON字符串
  • 传入的内容本身就是空值/非字符串类型

分场景解决方案

场景1:你在同一个PHP脚本里直接复用API端定义的$response变量

这种情况不需要做JSON解析,API端的$response本身就是数组,直接取值即可:

// 直接读取数组元素,不需要json_decode
$status = $response['status'];

你当前代码里的$response->body()属于错误用法:API端定义的$response是数组类型,不是HTTP响应对象,不存在body()方法,调用不存在的方法会返回空值,后续JSON解析自然失效。

场景2:你通过HTTP客户端(Guzzle、Curl等)调用该API接口获取响应

使用Guzzle客户端的修正代码

Guzzle的响应Body是对象类型,需要转成字符串后再解析:

// 把body对象转为字符串后再解析
$json = json_decode($response->getBody()->__toString(), true);
// 增加判断逻辑,避免异常
if (is_array($json) && isset($json['status'])) {
    $status = $json['status'];
}
dd($json);

使用原生Curl的修正代码

确保Curl开启了返回传输配置,拿到的返回值就是原始JSON字符串,直接解析即可:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$curlRes = curl_exec($ch);
$json = json_decode($curlRes, true);
if (is_array($json) && isset($json['status'])) {
    $status = $json['status'];
}
dd($json);

调试技巧

如果依然报错,可以先打印待解析的内容和JSON解析错误信息定位问题:

// 打印待解析的原始内容
var_dump($response->body());
// 打印JSON解析的错误提示
var_dump(json_last_error_msg());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:45:02