带有整数键的Ruby Hash更改为字符串键

时间:2014-08-20 12:46:32

标签: ruby json hash

我使用整数键在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"]

我的哈希非常复杂。值本身是一个应该有整数键的哈希值。有多个这样的嵌套级别

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