2016-12-16 50 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

出於好奇,它是否必須是一個數組?可以使用make builder_options使用特定但可選的密鑰進行哈希處理? – whodini9

+0

我想要十億美元而不用擔心什麼 – sig

+0

不一定是一個數組。它開始像這樣實際上是「status.statusCategory.key」,我把它在期間分開。 –

回答

1

對於紅寶石2.3 +,請參閱@ dgmora的答案。

對於舊版本的紅寶石,你可以使用這個可憐的男人的DIG:

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 

它將通過數組和哈希挖,但對數組的索引應該是一個整數。

+0

感謝您花時間回答。我有一種感覺注入會起作用,但我並沒有完全理解它在這種情況下的工作方式。你的回答真的很有幫助,再次感謝! –

1

不知道如果我理解正確的,但如果你使用Ruby 2.3.0+你可以嘗試

issue.fields.dig(*builder_options) 

Dig會從哈希數據不提高,因爲錯誤的東西是nil。圖示操作符(*)將把數組展開爲參數。所以這是一樣的,如果你會這樣做issue.fields.dig(builder_options[0], builder_options[1], builder_options[2]

+0

這真棒,我們在這個項目上使用ruby'2.2.1',但是當我們升級病毒時,請使用這個解決方案。謝謝! –