我有一个数组,其中包含我希望用于从大型JSON检索结果的值。我想像这样分组json
我的数组示例,这是动态的。
builder_options = ['status', 'statusCategory', 'key']
我希望这样做,但是应该在数组上指定索引,因为当数组发生变化时,这显然不会起作用。
jira_query.group_by{ |issue| issue.fields[builder_options.first][builder_options.second][builder_options.third] }
我只想要一种方法将我的数组添加到'field'的json对象中,这样我就可以查找嵌套数据,而无需担心长度或是否存在任何内容。 提前感谢
答案 0 :(得分:1)
不确定我是否理解正确,但如果您使用的是ruby 2.3.0+,则可以尝试
issue.fields.dig(*builder_options)
Dig从散列中获取数据而不会引发错误,因为某些内容为nil
。 splat运算符(*
)将数组扩展为参数。所以它就像你做issue.fields.dig(builder_options[0], builder_options[1], builder_options[2]
答案 1 :(得分:1)
对于ruby 2.3+,请参阅@ 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
它将挖掘Arrays和Hashes,但Array的索引应该是Integer。