如何通过动态数组从JSON返回值

时间:2016-12-16 21:27:15

标签: arrays json ruby hash

我有一个数组,其中包含我希望用于从大型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对象中,这样我就可以查找嵌套数据,而无需担心长度或是否存在任何内容。 提前感谢

2 个答案:

答案 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。