PHP:无法访问 JSON object/array

PHP: Trouble accessing JSON object/array

我想知道是否可以就我犯的以下错误寻求帮助...

我正在尝试在天气 api 中访问数据,但我似乎无法回应我需要的信息。

<?php
// fetch Aeris API output as a string and decode into an object
$response = file_get_contents("https://api.aerisapi.com/observations/closest?p=:auto&format=json&radius=50mi&filter=allstations&limit=5&fields=id,ob.tempF,ob.dewpointF,ob.humidity,ob.windSpeedMPH,ob.windDir,ob.weather,ob.heatindexF,ob.feelslikeF&client_id=fRqZ7kEn97lvuYQlIFZ8y&client_secret=GKl5UydVJoSP7UDxmXWx5J8pegsFybclACCyVksr");
$json = json_decode($response);

foreach ($json->response as $weather);

echo '<pre>'; var_dump($weather);
echo 'weather'->[ob];

?>

我收到以下错误:

( !) 解析错误:语法错误、意外的“[”、期望标识符 (T_STRING) 或变量 (T_VARIABLE) 或 C:[= 中的“{”或“$” 35=].php 第 10

我不确定错误是什么?

如果我们只看 $weather 打印出来的内容,如下所示:

C:\wamp64\www\aeris\aerisobs.php:9:
object(stdClass)[10]
public 'id' => string 'MID_F5795' (length=9)
public 'ob' => 
object(stdClass)[11]
  public 'tempF' => int 68
  public 'dewpointF' => int 64
  public 'humidity' => int 88
  public 'windSpeedMPH' => int 1
  public 'windDir' => string 'NE' (length=2)
  public 'weather' => string 'Cloudy with Mist and Fog' (length=24)
  public 'heatindexF' => int 68
  public 'feelslikeF' => int 68

如果有人愿意告诉我我的错误以及如何访问 ob 然后,例如,tempF 并打印出 68 以便我可以将其显示在网页上?

感谢您提供的任何帮助!

贾斯汀

未测试,但这应该可以让您使用另一个 foreach() 获取 ob 的内部值,还有您的第一个 foreach() 有一些语法错误,看看我下面的回答。这应该可以确保获得 $weather->ob

中的值
<?php
// fetch Aeris API output as a string and decode into an object
$response = file_get_contents("https://api.aerisapi.com/observations/closest?p=:auto&format=json&radius=50mi&filter=allstations&limit=5&fields=id,ob.tempF,ob.dewpointF,ob.humidity,ob.windSpeedMPH,ob.windDir,ob.weather,ob.heatindexF,ob.feelslikeF&client_id=fRqZ7kEn97lvuYQlIFZ8y&client_secret=GKl5UydVJoSP7UDxmXWx5J8pegsFybclACCyVksr");
$json = json_decode($response);
foreach ($json->response as $weather)
{
    echo '<pre>'; 
    #var_dump($weather);
    #print_r($weather->ob);
    echo '</pre>';
    foreach($weather->ob as $key=>$value){
        if($key =='tempF'){
          echo "$key = $value";
          echo "<br/>";
        }
       
    }
}
?>

基本上你需要迭代你的 $weather->ob 来获取内部值。假设你只需要来自内部对象的 tempF 值,那么你可以像上面那样放置一个 if 条件来打印它,只有当你需要 $weather->ob 中的所有值时,然后才删除条件