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

Laravel后端处理COD API返回数据时获取指定字段报错求助

解决Laravel中获取Call of Duty API返回的lifetime数据问题

你这是踩了个后端处理API响应的常见小坑——你拿到的$data并不是直接能通过对象属性访问的JSON对象,要么是还没解析的响应内容,要么是Laravel的响应实例,这才导致了Trying to get property 'data' of non-object的报错。我给你拆解下正确的处理步骤:

第一步:正确解析API响应

如果你是用Laravel自带的Http客户端发起的请求,直接拿到的$response是Illuminate\Http\Client\Response实例,不是解析后的JSON数据。你得先把响应内容转成数组或对象:

方式一:用数组处理(Laravel推荐,更安全)

// 发起API请求
$response = Http::get('你的Call of Duty API地址');

// 将响应解析为关联数组
$data = $response->json();

// 通过数组键名获取lifetime数据
$lifetimeData = $data['data']['lifetime'];

方式二:转成对象处理

如果你更习惯用对象属性访问,可以用json_decode处理响应体,记得第二个参数传false(默认就是false,但明确写出来更清晰):

$response = Http::get('你的Call of Duty API地址');

// 将响应体转成对象
$dataObject = json_decode($response->body(), false);

// 访问lifetime属性
$lifetimeData = $dataObject->data->lifetime;

第二步:加上容错处理(避免意外报错)

为了防止API返回异常(比如状态码非200、字段缺失),建议加个判断逻辑兜底:

$response = Http::get('你的Call of Duty API地址');

if ($response->successful() && isset($data['data']['lifetime'])) {
    $lifetimeData = $data['data']['lifetime'];
} else {
    // 处理异常情况,比如返回空数组或者抛出自定义异常
    $lifetimeData = [];
    // abort(500, 'API请求失败或数据格式异常');
}

为什么前端能直接访问data.data.lifetime?

因为前端收到的是你后端返回的JSON字符串,浏览器会自动把它解析成JavaScript对象,所以可以直接用点语法访问。但后端这边必须手动解析Laravel的响应对象,才能拿到里面的JSON数据结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 07:52:31