如何使用PHP导航JSON层次结构?

时间:2017-06-04 10:10:29

标签: php json

我正在构建一个解码JSON文件的天气应用程序(可在此处找到:http://api.openweathermap.org/data/2.5/forecast?q=Helsinki&appid=77f5e3fbc99649054660f82f871220f4&units=metric

我遇到的问题是在我的PHP代码中导航JSON文件以正确选择tempature。

我需要做list->1->main->temp但这会在PHP中引发一个数字错误。如何正确设置导航?

echo "<form id='searchform' method='POST' action='https://projekt2-sofiamusick.c9users.io/wordpress/prognos/'>
Search: <input type='text' name='searchquery' placeholder='Search the forum' />
<input class='sendbutton_search' type='submit' name='search' value='>>' />
</form>";

if (isset($_POST['search'])){

$cityz = $_POST['searchquery'];
echo "<br>";
echo "<div id=apithing>";
$data = file_get_contents("http://api.openweathermap.org/data/2.5/forecast?q=$cityz&appid=77f5e3fbc99649054660f82f871220f4&units=metric");
$jsonObject = json_decode($data, JSON_NUMERIC_CHECK);
json_encode( array( 'list' => (int)$jsonObject ) );
$list = $jsonObject->list;
$number = $jsonObject->'1';
$mains = $jsonObject->main;
echo $mains;

2 个答案:

答案 0 :(得分:2)

如果您使用myangularwebsite,则您的数据会以数组形式显示 如果你想获得第一个元素,只需使用.../api/external

如果没有JSON_NUMERIC_CHECK,您的数据将显示为stdClass,您可以使用$jsonObject['list'][0]获得第一个元素

答案 1 :(得分:0)

你可以像这样实现它

$data = file_get_contents("http://api.openweathermap.org/data/2.5/forecast?q=Helsinki&appid=77f5e3fbc99649054660f82f871220f4&units=metric");
$jsonObject = json_decode($data);
if($jsonObject->cod == '200' && count($jsonObject->list) > 0){
  foreach ($jsonObject->list as $jlk => $jlv) {
    $dt = $jlv->dt;
    $main = $jlv->main;
    // your rest of logic
  }
}

如果您愿意,可以看到这样的数据:

  echo '<pre>';
  var_dump($jsonObject);
  echo '</pre>';
  die;  

你会看到对象,意味着你必须使用“ - &gt;”要访问,你看到数组,使用数组的键来获取该值。

如果有任何其他疑问,请随时询问。