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 中的所有值时,然后才删除条件
我想知道是否可以就我犯的以下错误寻求帮助...
我正在尝试在天气 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 中的所有值时,然后才删除条件