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
相关产品推荐
相关产品推荐

