【问题标题】:Ruby Hash with integer keys changed to string keys整数键的 Ruby Hash 更改为字符串键
【发布时间】:2014-10-13 20:02:00
【问题描述】:

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

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

【问题讨论】:

  • 当然,遍历键,将它们转换为整数,并将它们的值设置为原始字符串键的值。

标签: ruby json hash


【解决方案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

【讨论】:

  • 问题是我的哈希非常复杂。该值本身是一个散列,它应该具有整数键。有多个这样的嵌套级别
  • 然后递归执行。 Avdi Grimm posted a method 为 YAML 和字符串/符号执行此操作,将其与 Martin 的答案结合起来以满足您的需求应该是微不足道的。
猜你喜欢
  • 1970-01-01
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 2014-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多