通过动态JSON密钥迭代

时间:2013-01-09 23:07:43

标签: ruby-on-rails ruby

使用:

JSON.parse(response.read_body)

返回此哈希:

{
    "stats": {
        "2012-10-31": 2637, 
        "2012-10-30": 2873, 
        "2012-12-14": 2894, 
        "2012-12-08": 2906, 
        "2012-12-09": 3357, 
        "2012-11-30": 4959
    }
}

问题是Date键可以是任何日期值。

我想要所有值的总和。

2 个答案:

答案 0 :(得分:3)

您可以使用Ruby Enumerable的reduce方法。我的示例中没有进行任何错误处理,但如果这些数据来自API,您可能需要处理错误或缺失的数据。

JSON.parse(response.read_body)["stats"].reduce 0 do |memo, kvp|
   memo + kvp.last
end

编辑:

选项2更多忍者:

JSON.parse(response.read_body)["stats"].values.reduce(&:+)

答案 1 :(得分:3)

如果您使用的是Rails,则可以使用Enumerable#sum

JSON.parse(response.read_body)["stats"].values.sum