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

如何将Laravel Http响应转为JSON对象而非数组实现属性访问

实现方案

Laravel Http Client 响应实例本身提供了object()方法,可以直接将返回的JSON结构转换为stdClass对象,实现对象属性方式访问字段,你更新后的写法已经是可用的正确实现,逻辑说明如下:

  1. throw()方法会在接口返回4xx/5xx错误时主动抛出异常,避免异常响应后续访问属性报错,属于可选但推荐添加的逻辑
  2. object()方法会将接口返回的JSON内容整体解析为PHP对象,嵌套结构也会同步转为嵌套对象,所以可以直接通过->访问各级属性

完整可运行代码

public function index()
{
    $response = Http::withToken($this->accessToken)
                    ->get('https://graph.microsoft.com/v1.0/users')
                    ->throw();
    $users = $response->object();
    foreach($users->value as $user)
    {
        echo $user->displayName . '<br/>';
    }
}

如果不需要单独保存解析后的用户对象,可以简化为:

public function index()
{
    $response = Http::withToken($this->accessToken)
                    ->get('https://graph.microsoft.com/v1.0/users')
                    ->throw();
                    
    foreach($response->object()->value as $user)
    {
        echo $user->displayName . '<br/>';
    }
}

额外兼容优化

如果要避免接口返回异常、或者字段不存在时报错,可以搭配Laravel的optional()辅助函数和空默认值处理:

public function index()
{
    $response = Http::withToken($this->accessToken)
                    ->get('https://graph.microsoft.com/v1.0/users')
                    ->throw();
                    
    foreach(optional($response->object())->value ?? [] as $user)
    {
        echo $user->displayName . '<br/>';
    }
}

原写法不生效的原因说明

之前直接写$response->value不生效,是因为Http响应实例本身不会自动将响应体内容挂载为自身属性,你之前用数组方式$response['value']能正常访问,是因为响应实例实现了ArrayAccess接口,会自动解析JSON为数组供数组方式调用,对象属性访问没有这类自动处理逻辑,所以必须显式调用object()方法拿到解析后的对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:48:03