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

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

詳細はこちら
Ruby

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

Q&A

解決済

1回答

778閲覧

ハッシュの階層をたどって検索する方法

hrc

総合スコア55

Ruby

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

0グッド

0クリップ

投稿2020/12/29 08:42

編集2020/12/29 09:44

RubyでAPIの戻り値であるハッシュの階層をたどって検索する方法を知りたいです。

下記のようなハッシュの
"thumbnail"の"id": "1013",
にあたるデータを抽出したいです。ハッシュのfindやselectでは出来なそうなので
どなたかご存じの方ご教示ください。

※抽出用ハッシュ(一部)

Ruby

1{ 2 "data": [ 3 { 4 "id": "1192", 5 "type": "product", 6 "attributes": { 7 "id": 1192, 8 "number": "test_001", 9 "state": "active", 10 "human_state": "表示", 11 "name": "テスト", 12 "upsell_product_id": 1198, 13 "upsell_product_number": "upsell", 14 "upsell_product_name": "アップセル", 15 "cv_upsell_product_id": 1309, 16 "cv_upsell_product_number": "thanks_upsell", 17 "cv_upsell_product_name": "サンクスアップセル", 18 "maker_id": null, 19 "maker_name": null, 20 "description": "", 21 "description_mobile": "", 22 "sub_description": "", 23 "sub_description_mobile": "", 24 "meta_description": "", 25 "meta_keywords": "", 26 "is_recurring": true, 27 "product_category_names": "", 28 "master_list_price": 7500, 29 "master_sales_price": 2500, 30 "master_sku": "smart_teiki_002-001", 31 "created_at": "2019/09/30 14:55:00", 32 "updated_at": "2020/04/17 01:47:48", 33 "deleted_at": null 34 }, 35 "relationships": { 36 "variants": { 37 "data": [ 38 { 39 "id": "1723", 40 "type": "variant" 41 }, 42 { 43 "id": "1722", 44 "type": "variant" 45 }, 46 { 47 "id": "1721", 48 "type": "variant" 49 }, 50 { 51 "id": "1720", 52 "type": "variant" 53 }, 54 { 55 "id": "1589", 56 "type": "variant" 57 } 58 ] 59 }, 60 "thumbnail": { 61 "data": { 62 "id": "1013", 63 "type": "thumbnail" 64 } 65 } 66 } 67 } 68 ], 69 "included": [ 70 { 71 "id": "1013", 72 "type": "thumbnail", 73 "attributes": { 74 "id": 1013, 75 "file_name": "test.png", 76 "content_type": "image/png", 77 "file_size": 599789, 78 "position": 0, 79 "url": "https://example.com/28cd4d9bc4/ec_assets/original.png?1587703559", 80 "url_small": "https://example.com/28cd4d9bc4/ec_assets/small.png?1587703559", 81 "url_medium": "https://example.com/28cd4d9bc4/ec_assets/medium.png?1587703559", 82 "url_large": "https://example.com/28cd4d9bc4/ec_assets/large.png?1587703559", 83 "path": "/28cd4d9bc4/ec_assets/original.png", 84 "path_small": "/28cd4d9bc4/ec_assets/small.png", 85 "path_medium": "/28cd4d9bc4/ec_assets/medium.png", 86 "path_large": "/28cd4d9bc4/ec_assets/large.png", 87 "created_at": "2020/04/24 13:46:00", 88 "updated_at": "2020/04/24 13:46:00" 89 } 90 } 91 ], 92 "meta": { 93 "total_count": 1, 94 "page": 1, 95 "per": 20, 96 "count": 1, 97 "total_pages": 1 98 }, 99 "links": { 100 "self": "http://localhost:3000/api/v1/products?page=1&per=20", 101 "prev": null, 102 "first": "http://localhost:3000/api/v1/products?page=1&per=1", 103 "next": "http://localhost:3000/api/v1/products?page=&per=20", 104 "last": "http://localhost:3000/api/v1/products?page=1&per=20" 105 } 106}

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

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

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

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

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

otn

2020/12/29 08:49

データが見にくくて、かつ、文法エラー(括弧が合わない?)なので、 ・長いので質問に関係する部分だけに絞ったデータ ・文法エラーで無い記述 にしてください。また、コードブロックに書くと良いです。
hrc

2020/12/29 09:44

失礼しました。修正したのでご確認ください。
otn

2020/12/29 11:00

・この構造のデータから"thumbnail"キーのデータを取りたい ・構造不明のデータから"thumbnail"キーのデータを全データをなめて検索したい のどちらでしょうか?
hrc

2020/12/29 11:11

・この構造のデータから"thumbnail"キーのデータを取りたい になります。thumbnailキー配下にある特定のIDのデータを抽出したいのです。よろしくお願いします。
guest

回答1

0

ベストアンサー

・この構造のデータから"thumbnail"キーのデータを取りたい

になります。

ということであれば、順番にキーまたは添え字を指定します。

Ruby

1a = ~~~ 2 3p a["data"][0]["relationships"]["thumbnail"] 4#=> {"data"=>{"id"=>"1013", "type"=>"thumbnail"}}

投稿2020/12/29 11:25

otn

総合スコア85882

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

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

hrc

2020/12/29 12:33

ありがとうございます! 頂いた情報を元にこちらでも調査したところ p[0]['included'].find{|p|p['id'] == '1013'} で取得できました。お騒がせしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問