如何解析这个JSON(PHP& JSON_DECODE)

时间:2017-08-03 21:35:47

标签: php json

我正在尝试使用以下API:https://openweathermap.org来获取当前天气。

{  
   "coord":{  
   "lon":
   "lat":
},
"weather":[  
   {  
     "id":521,
     "main":"Rain",
     "description":"shower rain",
     "icon":"09n"
  }
],
"base":"stations",
"main":{  
  "temp":289.22,
  "pressure":1004,
  "humidity":82,
  "temp_min":288.15,
  "temp_max":290.15
},
"visibility":10000,
"wind":{  
  "speed":4.1,
  "deg":210
},
"clouds":{  
  "all":100
},
"dt":1501793400,
"sys":{  
  "type":1,
  "id":5060,
  "message":0.0039,
  "country":"GB",
  "sunrise":1501734589,
  "sunset":1501790444
},
"id":3333126,
"name":"Borough of Blackburn with Darwen",
"cod":200
}

如果我想要天气 - >主要和天气 - >描述我该怎么做?

我正在做的那一刻:

$url = "http://api.openweathermap.org/data/2.5/weather?lat=" . $latitude . "&lon=" . $longitude . "&APPID=71f4ecbff00aaf4d61d438269b847f11";
$dirty_data = file_get_contents( $url );

$data = json_decode( $dirty_data );
echo $data['weather']['main'];

没有任何事情发生,我还能尝试让它发挥作用吗?

3 个答案:

答案 0 :(得分:0)

使用json_decode()json数据转换为php类型时,它总会将其转换为对象。要清楚,您可以访问天气的主要和描述属性,如下所示:

echo $data->weather[0]->main // outputs main
echo $data->weather[0]->description // outputs description

更新

此外,您还可以通过将bool(true)$ assoc参数传递给json_decode()函数,将数据转换为关联数组。

$data = json_decode( $dirty_data, true );

并提取您的数据:

echo $data['weather'][0]['main']; // for main
echo $data['weather'][0]['description']; // for description

答案 1 :(得分:0)

哟总是可以var_dump($data)查看您拥有的内容以及如何访问它 json_decode返回stdClass而不是数组 $data->weather[0]->main;
应该是正确的事 {}表示对象,[]表示数组。请注意weather:[{...}],这意味着天气是一组对象。

答案 2 :(得分:0)

尝试

$ data = json_decode($ dirty data,true)

如果提供true参数,它不会转换为对象。