2013-01-09 56 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

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