🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

383閲覧

ぐるなびAPIでJSONを取得後、ハッシュに変換し、キーを指定して値を取り出す方法

yurugby

総合スコア13

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2019/10/09 14:08

前提・実現したいこと

railsでぐるなびAPIを使用して、JSONデータをハッシュに変換してハッシュ全体をrailsのviewに表示するところまでできたのですが、キーを指定して値を取り出すことができません。

ハッシュの出力結果

{"@attributes"=>{"api_version"=>"v3"}, "total_hit_count"=>1, "hit_per_page"=>10, "page_offset"=>1, "rest"=>[{"@attributes"=>{"order"=>0}, "id"=>"6181321", "update_date"=>"2017-07-24T15:53:52+09:00", "name"=>"ラーメン二郎 京成大久保店", "name_kana"=>"ラーメンジロウケイセイオオクボテン", "latitude"=>"35.691489", "longitude"=>"140.049628", "category"=>"ラーメン", "url"=>"https://r.gnavi.co.jp/7kcdu5nu0000/?ak=J9zLLPVGsRaHc%2B0SYlTHAqPFsrGuQyRUAGrmenbsiO4%3D", "url_mobile"=>"http://mobile.gnavi.co.jp/shop/6181321/?ak=J9zLLPVGsRaHc%2B0SYlTHAqPFsrGuQyRUAGrmenbsiO4%3D", "coupon_url"=>{"pc"=>"", "mobile"=>""}, "image_url"=>{"shop_image1"=>"", "shop_image2"=>"", "qrcode"=>"https://c-r.gnst.jp/tool/qr/?id=6181321&q=6"}, "address"=>"〒274-0072 千葉県船橋市三山2-1-11 ", "tel"=>"047-472-5559", "tel_sub"=>"", "fax"=>"", "opentime"=>"", "holiday"=>"", "access"=>{"line"=>"京成本線", "station"=>"京成大久保駅", "station_exit"=>"北口", "walk"=>"徒歩17", "note"=>""}, "parking_lots"=>"", "pr"=>{"pr_short"=>"", "pr_long"=>""}, "code"=>{"areacode"=>"AREA110", "areaname"=>"関東", "prefcode"=>"PREF12", "prefname"=>"千葉県", "areacode_s"=>"AREAS2946", "areaname_s"=>"北習志野", "category_code_l"=>["RSFST08000", ""], "category_name_l"=>["ラーメン・麺料理", ""], "category_code_s"=>["RSFST08008", ""], "category_name_s"=>["ラーメン", ""]}, "budget"=>"", "party"=>"", "lunch"=>"", "credit_card"=>"", "e_money"=>"", "flags"=>{"mobile_site"=>1, "mobile_coupon"=>0, "pc_coupon"=>0}}]}

以下がrailsのerbファイルです。(keyidのところは自分のキーです。) <%= require 'net/http' require 'uri' require 'json' uri = URI.encode('https://api.gnavi.co.jp/RestSearchAPI/v3/?keyid=myid&name=ラーメン二郎京成大久保') url= URI.parse(uri) json = Net::HTTP.get(url) result = JSON.parse(json) p result %> ### 試したこと ここで、 p result を p result["name"]にしたのですが、なんの値も出ませんでした。(上記のハッシュにある通り、ラーメン二郎 京成大久保店が出てくるはずなのですが。) ### 補足情報(FW/ツールのバージョンなど) ruby '2.5.3' rails' 5.2.2' ぐるなびのAPIのURL https://api.gnavi.co.jp/api/

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

winterboum

2019/10/09 22:17

erbで書いていますが、rbでないのはなぜ? これは app/views のcodeですか?
yurugby

2019/10/09 22:21

おっしゃる通りです。app/viewsに表示させたいと考えております。controller(rb)で処理すべきでしょうか?
winterboum

2019/10/09 22:29 編集

pp なんでviewにしてはおかしいな、と思ったのです。 resultを得るところまではcontroller(か、できればmodel)でやるほうが良いでしょう。 必要なのは result["rest"] みたいですから、そこまで加工してviewに渡すのがよいかと。
guest

回答1

0

ベストアンサー

なぜ erb なのか、は謎ですが、なぜ出力されないか、は明白です。
pp result.keys => ["@attributes", "total_hit_count", "hit_per_page", "page_offset", "rest"]
ここに "name" がないのですから。
result["rest"].map(&:keys)
=> [["@attributes", "id", "update_date", "name", "name_kana", "latitude", "longitude", "category", "url", "url_mobile", "coupon_url", "image_url", "address", "tel", "tel_sub", "fax", "opentime", "holiday", "access", "parking_lots", "pr", "code", "budget", "party", "lunch", "credit_card", "e_money", "flags"]]

ここで出てきます。以下にすれば
result["rest"].map{|a| a["name"]} => ["ラーメン二郎 京成大久保店"]

hashの構造に合わせて読みだして下さい

投稿2019/10/09 22:24

winterboum

総合スコア23567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yurugby

2019/10/09 23:51

ご回答ありがとうございます。ハッシュの基本的なことが理解できていませんでした。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問