2016-12-16 16 views
1

大規模なJSONから結果を取得するために使用する値を保持する配列を持っています。私はこのようなjsonをグループ化したいJSONから動的配列経由で値を返す方法

私の配列の例は動的です。

builder_options = ['status', 'statusCategory', 'key'] 

と私はこれをやりたいと思いますが、配列のインデックスが配列を変更したときには明らかに機能しないため、配列のインデックスを指定しないでください。

 jira_query.group_by{ |issue| issue.fields[builder_options.first][builder_options.second][builder_options.third] } 

は私だけでJSONオブジェクトに私の配列を追加する方法をしたい「フィールド」私は長さ約か何かが存在するかどうかを気にせずに、ネストされたデータを検索することができます。 は私が正しく理解すればわからない、事前に

+0

好奇心ではなく、配列である必要がありますか? builder_optionsを特定のキー(任意のキー)でハッシュ化できますか? – whodini9

+0

何かを心配することなく10億ドルを欲しい – sig

+0

は配列である必要はありません。これは実際には "status.statusCategory.key"のように始まり、私はその期間に分割します。 –

答えて

1

については、@ dgmoraの答えをご覧ください。例として

jira_query.group_by{ |issue| 
     builder_options.inject(issue.fields){|h,key| h && h[key]} 
    } 

ルビーの古いバージョンでは、この貧乏人の発掘を使用することができます

issue_fields= {a:{b:{c: [:d,3]}}} 
[:a, :b, :c, 1].inject(issue_fields){|h,key| h && h[key] } # => 3 
[:z, :b, :c].inject(issue_fields){|h,key| h && h[key] } # => nil 

それは配列やハッシュを通じて掘るしますが、配列のインデックスIntegerでなければなりません。

+0

答えに時間を割いてくれてありがとう。私は注射がうまくいくと感じていましたが、私はこのようなもののために働く方法を完全に理解していませんでした。あなたの答えは本当に助けになりました、ありがとう! –

1

をいただきありがとうございますが、あなたはルビーを使用している場合は、

issue.fields.dig(*builder_options) 

Digを試すことができます2.3.0+何かので、エラーを上げることなく、ハッシュからデータを取得し、 nilです。 splat演算子(*)は、配列を引数に展開します。だからあなたと同じですissue.fields.dig(builder_options[0], builder_options[1], builder_options[2]

+0

これはすばらしいことですが、このプロジェクトではRuby '2.2.1'を使用していますが、アップグレードするときにはこの解決策を検討してください。ありがとうございました! –

関連する問題