[英]Incrementing json value of a key in ruby?
我正在尋找一種方法來增加鍵 foo 和 bar 的值
{
"users": [
{
"foo": 6522
},
{
"bar": 20
}
]
}
這是我嘗試的示例,但結果保持值不變。
data = JSON.parse(filepath\info.json)
puts data["users"][1].values[0] # 20
data["users"][1].values[0] += 5
puts data["users"][1].values[0] # remains 20, but expected 25
還有另一種方法可以增加這些值嗎?
您需要知道增加user
的密鑰。 由於有時看起來有所不同,因此您可以通過 2 each
s 來實現
data[:users].each {|u| u.keys.each {|k| u[k] += 1 } }
遍歷用戶,然后遍歷用戶 object 中的鍵,加 1。
這假設用戶只有一個密鑰,它是 integer。
values返回一個新數組,因此您將無法以這種方式使用它。
有多種方法可以做到這一點,但由於您已經擁有數據結構 Hash,對我來說最自然的方法是使用Hash#transform_values! 用於就地修改存儲為 Hash 值的整數。 考慮以下示例,它迭代存儲在hash[:users]
中的數組中的 Hash 個對象並遞增每個值:
hash = {:users=>[{:foo=>6522}, {:bar=>20}]}
hash[:users].map { |h| h.transform_values! { |v| v += 1 } }
#=> [{:foo=>6523}, {:bar=>21}]
# @note The changes to your Hash values are made in-place, and
# are persistent.
hash
#=> {:users=>[{:foo=>6523}, {:bar=>21}]}
當然,這種方法只有在您知道以下情況時才有效:users 是您的頂級 Hash 鍵,並且它包含一個 Hash 對象數組,每個對象都有 Integer 值。 如果您的數據結構不一致,或者您不能依賴數組中的 Hash 值為整數,那么您可能需要通過數據結構遞歸或模式匹配來采取更復雜和/或防御性的方法,並且然后在嘗試增加它們之前驗證您的 Hash 值是整數(或將它們轉換為整數)。
我上面提供的解決方案適用於您發布的示例,但肯定會做出一些基本假設。 如果它們對您的數據是安全的假設,那么請試一試!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.