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

Dan*_*lin 6 ruby hash json

我使用整数键在ruby中创建一个哈希并将其作为JSON响应发送.然后解析此JSON并将哈希转换回ruby.键现在是字符串文字.

我知道JSON不支持整数键但是我遇到了这个方法,它基本上解析了哈希,因此它有符号键.

JSON.parse(hash, {:symbolize_names => true})
Run Code Online (Sandbox Code Playgroud)

是否有类似的函数来获取原始整数键

a = {1 => 2}
a.keys
=> [1]
b = JSON.parse(JSON.generate(a))
b.keys
=> ["1"]
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*tin 7

据我所知,JSON中没有任何内容,但转换很容易:

json_hash = {"1" => "2" }
integer_hash = Hash[json_hash.map{|k,v|[ k.to_i, v.to_i ]}]
=> {1 => 2}
Run Code Online (Sandbox Code Playgroud)

因此,我们从初始hash(json_hash)中获取所有键和值,在它们上调用to_i并在新的hash(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
Run Code Online (Sandbox Code Playgroud)