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

标签 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"]

我的散列非常复杂。该值本身是一个散列,应该具有整数键。有多个这样的嵌套层次

最佳答案

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

关于具有整数键的 Ruby Hash 更改为字符串键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25405120/

相关文章:

ruby-on-rails - Mongoid : Eager loading count on has_many association

ruby-on-rails - ActionController::UrlGenerationError 与 POST #create 在 RSpec 中的 Action

ruby - 在瓦提尔打开新的一页

javascript - 在 Laravel 5.1 中通过 ajax 提交表单

python - 使用通配符搜索迭代 Redis 哈希键

ruby - 如何处理 Ruby 中三角形类的初始化方法

python - 使用 Lambda 从 S3 读取数据

javascript - 无法将数组从 jQuery 发送到 MVC 4 Controller

perl - 通过值进行简单的哈希搜索

ruby-on-rails - rails 中是否有类似于 in_groups_of 的方法但用于哈希?