大企業営業から未経験ITエンジニアを目指すブログ

アラサー大企業営業から未経験ITエンジニアを目指すブログ。日々学んだことを忘備録的に記します。

PHPでJSONデータの中身が上手く取得できないとき

お天気チャットボットを作成するにあたってOpenWeatherMapのWebAPIから天気のjsonデータを取得したい。

 

取得する天気データは選べるが、3時間おき×5件(朝取得して夜(12時間後)まで)を取得することにした。

 

取得できるデータ↓

https://openweathermap.org/forecast5

 

都市のIDやら気圧、風、海水面やら要らない情報がたくさん含まれるので、天気と気温だけ抜き取りたいけど、

$response->list->weather->descriptionで取得できない。

$response->list->weatherまでは取得できたけどstdClassというのが含まれる。

オブジェクトではないとエラーが出て、値にたどり着けない。

 

■対処法

①どこまで取得できているのかを、var_dump()で確認。

②下記でJSONデータを連想配列にしてしまう。(stdClassが含まれる場合の処理は不明)

 $response = json_decode($json, true);

 trueがポイント。trueを入れないと連想配列にならず、オブジェクトになる(?)。

③①でvar_dump()で確認した内容をもとに、連想配列で辿る。

 今回の場合は$response['list']['weather'][0]['description']でいけた。

 間の[0]がなかったから取得できなかったらしい。