【问题标题】:Notice: Undefined property: stdClass::$list_data注意:未定义的属性:stdClass::$list_data
【发布时间】:2017-09-27 17:13:38
【问题描述】:

我正在尝试使用 API 访问数据并希望在 HTML 表格中显示数据。很多时候这段代码运行没有任何问题,但有时它会显示错误 Notice: Undefined property: stdClass::$list_data Notice: Trying to get property of non-object 我在google上搜索这个问题,但由于我是php初学者,所以无法解决这个问题。

<?php
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    $opts = array(
        'http' => array(
            'method' => 'POST'
        )
    );
    $context = stream_context_create($opts);
    $json = file_get_contents('https://faucethub.io/api/listv1/faucetlist?api_key=API_KEY', false, $context);
    $obj = json_decode($json);
?>

<?php
    $gg = $obj->list_data->premium->BTC;
    if (is_array($gg))
        {
        foreach(array_slice($gg, 0, 350) as $btcf)
            {
            $bh = $btcf->health;                
            echo "<tr>    
             <td>$btcf->name</td>
             <td><span class='btn btn-xs btn-success'>$btcf->reward</span></td>
             <td><span class='btn btn-xs btn-info'><i class='fa fa-clock-o'></i> $btcf->timer_in_minutes</span></td>
             <td><span class='glyphicon glyphicon-bitcoin'>$btcf->paid_week</span></td> 
             <td>$btcf->active_users</td>
            }
        }
?>

如果你帮助解决这个问题,那么我可以从中学到新的东西。如果需要任何其他信息,我可以更新它。

【问题讨论】:

  • 你能像这样转储 $obj 变量吗? var_dump($obj); 只是看看返回了什么。你也检查过 $json 返回了什么吗?
  • 当前站点 API 不工作,但如果工作,我会更新它。这对takepure.info/list.php有帮助吗
  • API 现已上线。现在你可以看到 var_dump($gg);从上面的链接。我希望这能帮助我得到更准确的答案。
  • 如您所见,api 返回了对象数组。你想收集什么信息?
  • 我刚刚编辑了我上面的代码,你可以在那里找到我想要的。

标签: php json api


【解决方案1】:

出现Notice: Trying to get property of non-object 表示json_decode($json); 没有返回预期的对象,出现错误。

要检查它,你可以使用类似这样的东西

$obj = json_decode($json);
if (json_last_error() !== JSON_ERROR_NONE) {
    // handle json error. 
    $errorMessage = json_last_error_msg();
    echo $errorMessage;
    // or 
    // throw new Exception($errorMessage);
}

文档:

json_last_error_msg

json_last_error

【讨论】:

  • 如果站点 api 正常工作,我会尽快使用它,但很抱歉,我必须在其中添加它。
  • 你能告诉我添加这段代码和 json_decode($json); 之后会发生什么吗?没有返回预期的对象
  • 如何处理这种错误取决于你,这取决于你。也许您可以只向最终用户显示“抱歉,服务不可用”,或者您可以重试对 API 的请求。
【解决方案2】:

尝试这样的事情,而不是最后一个 &lt;?php 块:

<?php
foreach($obj as $company) {
   echo $company->name.'<br>';
   echo $company->reward.'<br>';
   echo $company->timer_in_minutes.'<br>';
   echo $company->paid_week.'<br>';
   echo $company->active_users.'<br>';
}

【讨论】:

  • 但此时我遇到错误 $gg = $obj->list_data->premium->BTC​​;那么为什么我必须在 foreach 中进行编辑
  • 好的,我的意思是$obj 是对象数组,因此您无法像对象$obj-&gt;list_data 那样访问它
  • 那为什么有时它有效,有时却无效。这没有你的代码。
  • 哦,对不起。我刚刚读到documentation 一个可能的原因是,api 返回了一些错误。例如{"status":402,"message":"This faucet has insufficient funds to send the payout."} 如果你没有得到想要的结果,你可以尝试抛出一些异常。因此,您无法从响应中获取数据。
猜你喜欢
  • 1970-01-01
  • 2016-04-17
  • 2016-11-12
  • 2011-03-05
  • 2015-02-27
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-22
相关资源
最近更新 更多