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

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

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

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

Ruby

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

Q&A

解決済

2回答

817閲覧

rubyでhashを動的に生成する方法について

tacchy

総合スコア14

Ruby on Rails 5

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

Ruby

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

0グッド

2クリップ

投稿2019/06/18 11:53

編集2019/06/18 11:54

前提・実現したいこと

rubyで、ある外部APIを叩いて得られた数百程度のデータをもとに、画像のようなハッシュを生成したいです。

イメージ説明

生成したあとは、joinして、次のような配列を得たいです。

イメージ説明

お答えいただきたいこと

具体的なコードを見たいので、以下のシチュエーションでならどのようにするのかを教えていただけると幸いです。

以下の上なjsonオブジェクトがあるとします。

json

1[ 2 { 3 "id": 0, 4 "guid": "5a703d77-fa8f-4cd2-9836-25179a98d4b9", 5 "isActive": false, 6 "name": "orange", 7 "balance": "$2,944.15", 8 "price": 1000, 9 "picture": "http://placehold.it/32x32" 10 } 11 { 12 "id": 1, 13 "guid": "73232ac9-9948-402d-9f36-077af326ef9b", 14 "isActive": true, 15 "name": "lemon", 16 "balance": "$2,599.74", 17 "price": 2000, 18 "picture": "http://placehold.it/32x32" 19 }, 20 { 21 "id": 2, 22 "guid": "ec22f32a-e380-49b3-9558-6d8434d4d81f", 23 "isActive": true, 24 "name": "cherry", 25 "balance": "$2,309.28", 26 "price": 3000, 27 "picture": "http://placehold.it/32x32" 28 } 29]

これを、rubyで、matched_hash を一度生成してから、 matched_list を生成するには、どのようなコードを書くことが考えられますか?
JSONのデータが100でも1000でも処理できるような方法でお願いできれば嬉しいです。

ruby

1matched_hash = [ 2 { name: "orange", price: 1000 }, 3 { name: "lemon", price: 2000 }, 4 { name: "cherry", price: 3000 } 5]

ruby

1matched_list = [ 2 "orange 1000", 3 "lemon 2000", 4 "cherry 3000" 5]

何卒よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

書いては見ましたが、matched_hash って使いにくい構造ですね。
_hash というのに Array ですし。
matched_list を作るための中間データなら不要です。JSON.loadから直に書けます。
matched_hash をつくるなら、わたしなら
JSON.load.map{|h| [h["name"],h["price"]]}.to_h

ですね。
価格以外も使う可能性があるなら
JSON.load.map{|h| [h["name"],h]}.to_h

投稿2019/06/18 21:21

winterboum

総合スコア23284

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

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

0

matched_hash = JSON.load(json_string).map{|h| h.slice("name","price")} matched_list = matched_hash.map{|h| "#{h['name']} #{h['price']}"}

投稿2019/06/18 20:24

winterboum

総合スコア23284

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問