2013-01-09 57 views
0

使用:迭代通过动态JSON键

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 
    } 
} 

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

我想要所有值的总和。

回答

3

如果你在Rails的时候,你可以只使用Enumerable#sum

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

谢谢,完美的作品 –

+1

没问题。在Ruby/Rails的Enumerable上学习方法非常值得。 – wless1

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(&:+) 
+0

谢谢,你的忍者效果很好。 –