我使用整数键在ruby中创建一个哈希并将其作为JSON响应发送。然后解析此JSON并将哈希转换回ruby。键现在是字符串文字。
我知道JSON不支持整数键但是我遇到了这个方法,它基本上解析了哈希,使它有符号键。
JSON.parse(hash, {:symbolize_names => true})
是否有类似的函数来获取原始整数键
a = {1 => 2}
a.keys
=> [1]
b = JSON.parse(JSON.generate(a))
b.keys
=> ["1"]
我的哈希非常复杂。值本身是一个应该有整数键的哈希值。有多个这样的嵌套级别
答案 0 :(得分:7)
Nothing in JSON,但转换很容易:
json_hash = {"1" => "2" }
integer_hash = Hash[json_hash.map{|k,v|[ k.to_i, v.to_i ]}]
=> {1 => 2}
所以,我们采取所有的关键&来自初始哈希值json_hash
)的值,在它们上调用to_i并将它们放入新的哈希值(integer_hash
)。
即使嵌套也没有阻塞。你可以用一种方法来做到这一点:
def to_integer_keys(hash)
keys_values = hash.map do |k,v|
if(v.kind_of? Hash)
new_value = to_integer_keys(v) #it's a hash, let's call it again
else
new_value = v.to_i #it's a integer, let's convert
end
[k.to_i, new_value]
end
Hash[keys_values]
end