質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

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

JSON

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

Q&A

解決済

2回答

826閲覧

JSONで得た結果のある要素を、rubyの変数に代入したい

NN77

総合スコア59

Ruby

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

JSON

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

0グッド

0クリップ

投稿2019/08/18 07:02

実現したいこととご質問

googleのapiを利用して、以下のようなJSONの結果が返ってきており、
この中の"duration"=>{"text"=>"33 mins", "value"=>1967},
の33という数字をtimeという変数に代入したいと思っていますが、
JSONを扱うのが初めてで、色々と調べてもいまいちよくわからずにおります・・・

[1] pry(main)> response => {"geocoded_waypoints"=> [{"geocoder_status"=>"OK", "place_id"=>"ChIJ0Qgx67KMGGARd2ZbObLZHPE", "types"=>["locality", "political"]}, {"geocoder_status"=>"OK", "place_id"=>"ChIJWRK3eBSLGGARCdO8OgKkE5w", "types"=>["political", "sublocality", "sublocality_level_2"]}], "routes"=> [{"bounds"=>{"northeast"=>{"lat"=>35.6622678, "lng"=>139.7153187}, "southwest"=>{"lat"=>35.6458126, "lng"=>139.703939}}, "copyrights"=>"Map data ©2019 Google", "legs"=> [{"distance"=>{"text"=>"2.6 km", "value"=>2568}, "duration"=>{"text"=>"33 mins", "value"=>1967}, "end_address"=>"Ebisu, Shibuya City, Tokyo 150-0013, Japan", "end_location"=>{"lat"=>35.6458126, "lng"=>139.7153187}, "start_address"=>"Shibuya City, Tokyo, Japan", "start_location"=>{"lat"=>35.6622678, "lng"=>139.703939}, "steps"=> [{"distance"=>{"text"=>"0.3 km", "value"=>312}, "duration"=>{"text"=>"4 mins", "value"=>261}, "end_location"=>{"lat"=>35.6608076, "lng"=>139.7067344}, "html_instructions"=>"Head <b>east</b>", "polyline"=>{"points"=>"ehtxEs|tsYVgA@ECAh@gCHYBM@EDKBGNWT_@Xg@@EBE|@{A@EVWj@m@"}, "start_location"=>{"lat"=>35.6622678, "lng"=>139.703939}, "travel_mode"=>"WALKING"}, {"distance"=>{"text"=>"6 m", "value"=>6}, "duration"=>{"text"=>"1 min", "value"=>4}, "end_location"=>{"lat"=>35.6607444, "lng"=>139.7068565}, "html_instructions"=>"Turn <b>left</b> onto <b>青山通り</b>/<b>国道246号</b>", "maneuver"=>"turn-left", "polyline"=>{"points"=>"a_txEanusYCEPS"}, "start_location"=>{"lat"=>35.6608076, "lng"=>139.7067344}, "travel_mode"=>"WALKING"}, {"distance"=>{"text"=>"23 m", "value"=>23}, "duration"=>{"text"=>"1 min", "value"=>40}, "end_location"=>{"lat"=>35.660603, "lng"=>139.7069058}, "html_instructions"=>"Cross the road",      "polyline"=>{"points"=>"s~sxE{nusY@CPQFJ"}, "start_location"=>{"lat"=>35.6607444, "lng"=>139.7068565}, "travel_mode"=>"WALKING"}, {"distance"=>{"text"=>"0.3 km", "value"=>267}, "duration"=>{"text"=>"3 mins", "value"=>196}, "end_location"=>{"lat"=>35.6587413, "lng"=>139.7085902}, "html_instructions"=>"Turn <b>left</b>", "maneuver"=>"turn-left", "polyline"=>{"points"=>"w}sxEeousYFEXU@Cb@]BC`A{@FGv@s@BD~@y@DGXUb@a@FEHKHI@E"}, "start_location"=>{"lat"=>35.660603, "lng"=>139.7069058}, "travel_mode"=>"WALKING"}, {"distance"=>{"text"=>"0.4 km", "value"=>426}, "duration"=>{"text"=>"5 mins", "value"=>300}, "end_location"=>{"lat"=>35.6553456, "lng"=>139.7065912}, "html_instructions"=>"Turn <b>right</b>", "maneuver"=>"turn-right", "polyline"=>{"points"=>"crsxEuyusYB@HDZNNDFBDBXLPNB@NHJFB@HDDBNBDFfAh@DBLFHDFBf@VNDRJDD\PLDvAr@D@RJh@XFBPJTLPH\R"}, "start_location"=>{"lat"=>35.6587413, "lng"=>139.7085902}, "travel_mode"=>"WALKING"}, {"distance"=>{"text"=>"11 m", "value"=>11}, "duration"=>{"text"=>"1 min", "value"=>8}, "end_location"=>{"lat"=>35.6553467, "lng"=>139.7064737}, "html_instructions"=>"Turn <b>right</b> onto <b>明治通り</b>/<b>都道305号</b>", "maneuver"=>"turn-right", "polyline"=>{"points"=>"}|rxEemusYGHFL"}, "start_location"=>{"lat"=>35.6553456, "lng"=>139.7065912}, "travel_mode"=>"WALKING"}, {"distance"=>{"text"=>"0.2 km", "value"=>192}, "duration"=>{"text"=>"3 mins", "value"=>167}, "end_location"=>{"lat"=>35.6538622, "lng"=>139.7055776}, "html_instructions"=>"Turn <b>left</b> at <b>並木橋(交差点)</b>", "maneuver"=>"turn-left", "polyline"=>{"points"=>"}|rxEmlusYLF?ENJFDDBLFHBB@LBFBF@JDLFFBRJDBLHz@h@j@\PL"}, "start_location"=>{"lat"=>35.6553467, "lng"=>139.7064737}, "travel_mode"=>"WALKING"}, {"distance"=>{"text"=>"0.7 km", "value"=>748}, "duration"=>{"text"=>"9 mins", "value"=>541}, "end_location"=>{"lat"=>35.6482206, "lng"=>139.710175}, "html_instructions"=>"Turn <b>left</b>", "maneuver"=>"turn-left", "polyline"=> {"points"=> "ssrxE{fusY^_@t@m@FLBCl@i@HERQLMJIDEDGBCDGBCBC@AFCBADEFETMBAFABAFCDEFGJGHGd@c@HGLKLKVYZ[DC@AFEPMDEt@i@XQHEPKd@WZO\QvAm@hAi@BADCDCFKTOXQJG@?DEBCFGHIRSBCDE`@_@DGDGDEDIHMLS@A@CBA?AEMX_@"}, "start_location"=>{"lat"=>35.6538622, "lng"=>139.7055776}, "travel_mode"=>"WALKING"}, {"distance"=>{"text"=>"0.6 km", "value"=>583}, "duration"=>{"text"=>"8 mins", "value"=>450}, "end_location"=>{"lat"=>35.6458126, "lng"=>139.7153187}, "html_instructions"=>"Continue straight onto <b>都道305号</b><div style=\"font-size:0.9em\">Destination will be on the left</div>", "maneuver"=>"straight", "polyline"=>{"points"=>"kpqxEscvsYFGt@w@j@q@DIJIJAHSzAaBDGPSFG`@c@HMp@u@FGDEFEFE?K?IDW?OJoALwA@UReCJoADMCCR{B"}, "start_location"=>{"lat"=>35.6482206, "lng"=>139.710175}, "travel_mode"=>"WALKING"}], "traffic_speed_entry"=>[], "via_waypoint"=>[]}], "overview_polyline"=> {"points"=> "ehtxEs|tsYXmACAh@gCLg@FQbAgBdAmBbAeACEPSRUFJFEZYf@a@hAcAv@s@BDdAaA|@w@PQJOx@\LFj@\b@TNHNBDFlAl@VLrAl@b@VdBx@jAj@vAv@GHFLLF?EVPRJb@Lh@RbBbA|@j@tAmAFLBCv@o@r@o@RWx@g@XMbA{@hBaBfBoA|Ay@bEkBJGFKTOd@YFEh@i@p@q@Ze@T[EO`@g@rB}BJAHS`BiBdAmAfAiAFE?KDa@J_BNmB^uEDMCCR{B"}, "summary"=>"都道305号", "warnings"=>["Walking directions are in beta. Use caution – This route may be missing sidewalks or pedestrian paths."], "waypoint_order"=>[]}],

time=何と記載すると、
time=33にすることができるのか、
おわかりになる方がいれば教えていただきたいです。非常に初歩的な質問で申し訳ありません。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/08/18 07:13

質問にアップされているのが JSON 文字列なのですか? JSON であれば http://www.json.org/json-ja.html にあるような形式になると思うのですが・・・
guest

回答2

0

JSONではなく配列とハッシュの知識があれば扱えます。
これらはRubyのごく基本的な仕組みなので、まずは何か入門書に取り組むのが良いかと思います。

投稿2019/08/18 07:43

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

NN77

2019/08/22 09:06

dyoshikawa様 ご指摘ありがとうございます。 JSONだから特別かと思っていましたが、コメントいただいて概念から理解できました。 以下のような配列内からハッシュを取り出す作業と同じだと勉強できました。 https://qiita.com/hiroshimaeasyryo/items/5065c7714ae73579d80f 今後はこのようなケースは自分で解決いたします。 ありがとうございました。
guest

0

ベストアンサー

time=何と記載すると、

time=33にすることができるのか、

ド直球でやると

ruby

1time = response["routes"][0]["legs"][0]["duration"]["text"].delete(" mins").to_i

投稿2019/08/18 07:55

編集2019/08/18 07:57
gentaro

総合スコア8949

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

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

winterboum

2019/08/18 08:23

to_iするんですから .delete(" mins") は無くてもOKでは?
gentaro

2019/08/18 08:34

そうですね。個人的に無いのは気持ち悪いですけど。
gentaro

2019/08/18 08:38

ruby常用してないから気持ち悪いと思うけど、世のrubist的にはダイレクトにto_iするのが普通なんだろうか? だとするとコード直した方が良いかな…。
otn

2019/08/18 12:29

難しいですね。 Cのatoi()の時に消すか?と言われると、まず消さない(めんどうだから)。 Rubyでもto_iでは例外が起こったりnilになったりしないという設計思想からすると、消さなくていいと思う人が多いでしょうか。 コードを直すことは無いと思います。
winterboum

2019/08/18 12:37

直さなくてもよいかと。 私のコメントも、そういう手もあるよ、ということを質問者に伝えたかった位の意味です。 私は、typing減らしたい方なので、消さないかな。
gentaro

2019/08/18 17:26 編集

ご意見ありがとうございます。 設計思想、というとごもっともだし、パフォーマンス的にもdeleteは書かない方が正解かな、と思う一方、コード上で意図をちゃんと表現する(かつパフォーマンスが問題にならないケース)ならあっても良さそうな。 コーディングガイドラインとか作るなら無しにしそうだけど、説明のためなら有り、ぐらいの感じかな? とりあえず読んだ方に判断を任せます。
NN77

2019/08/22 09:13

gentaro様 ご返信が遅れて誠に申し訳ありません。 コード、ありがとうございますm_ _m 行ないたかった通り、ドンピシャの結果が出ました。 winterboum様、otn様 コメントありがとうございます。 整数変換する際にdeleteするか否か、という点について、 両方の考え方があるのだということ自体がとても勉強になりました。誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問