前提・実現したいこと
楽天レシピカテゴリ別ランキングAPIから取得したjson形式のテキストデータをjsonオブジェクトに変換したい。
最終的にjson型に変換して処理を色々したいのですが、そのjson型への変換するためのjson_decode()
がうまくいきません。
該当のソースコード
php
1function rakutenRecipeApi() 2{ 3 $appId = 'xxxxxxxxxxxx'; 4 $request = 'https://app.rakuten.co.jp/services/api/Recipe/CategoryRanking/20170426?applicationId=' . $appId . '&formatVersion=2&elements=recipeTitle,recipeDescription&categoryId=36-494'; 5 6 $ch = curl_init(); 7 8 curl_setopt($ch, CURLOPT_URL, $request); 9 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 10 11 $response = curl_exec($ch); 12 13 curl_close($ch); 14 15 return $response; 16} 17 18$getRecipe = json_decode(rakutenRecipeApi(), JSON_OBJECT_AS_ARRAY); 19 20echo gettype($getRecipe); // 'integer'と返ってくる 21print_r($getRecipe);
上記コードのprint_r($getRecipe)で取得したデータ
{"result":[{"recipeDescription":"これからの季節は冷しゃぶが大活躍します!ただ水で茹でるだけだと水っぽく仕上がるので、この「コツ」を覚えてさらに美味しくいただきます♪","recipeTitle":"<定番シリーズ>簡単なコツで美味しい冷しゃぶ"},{"recipeDescription":"コクがあるのに後味さっぱり、ご飯が進む一皿です♪\nスタミナupしたい時にもおススメです!豚肉に含まれるビタミンB群とニンニクパワーで、疲れも吹っ飛ぶ…かも^^","recipeTitle":"子どもにも好評♪豚肉と玉ねぎのガリマヨポン♪"},{"recipeDescription":"家にある材料で簡単にホイコーローが出来ます♪甜麺醤なしできるのでいつでも作れますヾ(*´∀`*)ノ","recipeTitle":"甜麺醤なしで出来る!簡単 ホイコーロー"},{"recipeDescription":"ビタミンB1とクエン酸で疲労回復に最強!!","recipeTitle":"豚肉と玉ねぎのポン酢炒め"}]}1
整形すると以下になります。
パット見json形式のような気がするのですが、json_decode()
を使ってもstring型になります。
{ "result": [{ "recipeDescription": "これからの季節は冷しゃぶが大活躍します!ただ水で茹でるだけだと水っぽく仕上がるので、この「コツ」を覚えてさらに美味しくいただきます♪", "recipeTitle": "<定番シリーズ>簡単なコツで美味しい冷しゃぶ" }, { "recipeDescription": "コクがあるのに後味さっぱり、ご飯が進む一皿です♪\nスタミナupしたい時にもおススメです!豚肉に含まれるビタミンB群とニンニクパワーで、疲れも吹っ飛ぶ…かも^^", "recipeTitle": "子どもにも好評♪豚肉と玉ねぎのガリマヨポン♪" }, { "recipeDescription": "家にある材料で簡単にホイコーローが出来ます♪甜麺醤なしできるのでいつでも作れますヾ(*´∀`*)ノ", "recipeTitle": "甜麺醤なしで出来る!簡単 ホイコーロー" }, { "recipeDescription": "ビタミンB1とクエン酸で疲労回復に最強!!", "recipeTitle": "豚肉と玉ねぎのポン酢炒め" }] } 1
ご回答を頂き追記
encode
をdecode
にしてもダメでした。
decodeバージョンのコードを質問文に反映させました。
今気づいたのですが、取得したjson形式の文字列の最後に数字の1
が付いていました。
もしかしたらこれが原因で、うまく変換できないのでしょうか?
なぜ数字の1
が最後につくのでしょう・・・
ちなみに、取得したjson形式の文字列をgettype()
するとinteger
が返ってきました。
さっきはstring
でした...
さらに気づいたことが、
print_r($getRecipe)
を実行すると、データの最後に1がつき、
print_r($getRecipe)
を削除しても何故かサイト上には出力され、その場合にはデータの最後には1がつきませんでした。
そもそもなぜ、print_r
を削除してもサイト上に出力されるのでしょうか・・・
クローズ前の追記
結局返ってくる値の最後に謎の1
が付く原因がわかりませんでした。
httpリクエストの方法をcurl以外で試したら1
が付かなかったので、その方法で実装を進めようと思います。
アドバイス頂いた皆さま、ありがとうございました。
回答3件
あなたの回答
tips
プレビュー