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]がなかったから取得できなかったらしい。