试图从 API 获取 json 中非对象的属性

Posted

技术标签:

【中文标题】试图从 API 获取 json 中非对象的属性【英文标题】:Trying to get property of non-object in json from API 【发布时间】:2020-08-08 05:59:12 【问题描述】:

我正在使用 Discord API 让 Discord 公会中的成员显示 10 个随机用户,并使用 foreach 方法将其显示在带有刀片的视图中。

我从 API 获取 JSON,获取它的成员数组并对其进行切片以仅返回 10 个成员以将其从控制器发送到视图。

问题是,当我想解析它并使用数组的一个元素 (avatar_url) 时,它不起作用,我收到以下错误消息:Trying to get property 'avatar_url' of non-object

这是我的控制器

class IndexController extends Controller 

    ...

    /**
     * Function to get 10 random players on fivem
     * @return array
     */
    private function getServerPlayers() 
        $request = file_get_contents('https://discordapp.com/api/guilds/683766194884575355/widget.json');
        $decoded = json_decode($request, true)['members'];

        return array_slice($decoded, 0, 10);
    

    /**
     * Return index view
     * @return Factory|View
     */
    public function index() 

        return view('index')->with('players', $this->getServerPlayers())->with('clients', $this->getServerClients())->with('members', $this->getDiscordMembers());
    

这是我的看法

<div class="row">
                <div class="col-lg-12">
                    <div class="tab-content" id="pills-tabContent">
                        <div class="tab-pane fade show active" id="pills-all-bets" role="tabpanel"
                            aria-labelledby="pills-all-bets-tab">
                            <div class="responsive-table">
                                <table class="table">
                                    <thead>
                                        <tr>
                                            <th scope="col">Nom du joueur</th>
                                            <th scope="col">Statut</th>
                                        </tr>
                                    </thead>
                                    <tbody>
                                        @foreach($players as $player)
                                        <tr>
                                            <td><img src=" $player->avatar_url "> $player->username </td>
                                            <td>En ligne</td>
                                        </tr>
                                        @endforeach
                                    </tbody>
                                </table>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

我认为这个问题有点愚蠢,但我被阻止了,我需要一些帮助!

谢谢。

【问题讨论】:

【参考方案1】:

问题在于json_decode 返回的是一个数组而不是一个对象。

您可以使用以下方式将参数传递给视图:

        return view('index',[
            'players' => $this->getServerPlayers(),
            'clients' => $this->getServerClients(),
            'members' => $this->getDiscordMembers(),
        ]);

然后在视图中显示它们:

<img src=" $player['avatar_url'] "> $player['username'] 

【讨论】:

【参考方案2】:

你应该像这样使用avatar_url

<td><img src=" $player['avatar_url'] "> $player['username'] </td>

因为你传递给 view 的是一个数组,而不是一个对象。

【讨论】:

以上是关于试图从 API 获取 json 中非对象的属性的主要内容,如果未能解决你的问题,请参考以下文章

如何解决消息:试图在 Codeigniter 中获取非对象错误的属性?

如何在反应中获取 api 对象属性

使用 fetch、cors 时如何从 json API 获取属性?

试图从模型获取数据到视图,我得到这些错误: 试图获取非对象和未定义变量的属性

在 MVC Web Api 4 Beta 中从 Json 中删除 Null 属性

试图获取非对象的属性“id_pembelian”