我有一个Ruby散列,它看起来像这样:
{ "id" => "123", "name" => "test" }
我想将其转换为:
{ :id => "123", :name => "test" }
发布于 2011-12-05 09:25:29
hash = {"apple" => "banana", "coconut" => "domino"}
Hash[hash.map{ |k, v| [k.to_sym, v] }]
#=> {:apple=>"banana", :coconut=>"domino"}
@mu太短了:我没有看到“递归”这个词,但如果你坚持(以及对不存在的to_sym
的保护,只想提醒一下在Ruby1.8的1.to_sym == nil
中,使用一些键类型可能会产生误导):
hash = {"a" => {"b" => "c"}, "d" => "e", Object.new => "g"}
s2s =
lambda do |h|
Hash === h ?
Hash[
h.map do |k, v|
[k.respond_to?(:to_sym) ? k.to_sym : k, s2s[v]]
end
] : h
end
s2s[hash] #=> {:d=>"e", #<Object:0x100396ee8>=>"g", :a=>{:b=>"c"}}
发布于 2015-05-05 17:36:49
如果您使用的是Rails >= 4,则可以使用:
hash.deep_symbolize_keys
hash.deep_symbolize_keys!
或
hash.deep_stringify_keys
hash.deep_stringify_keys!
发布于 2014-09-25 22:25:37
如果您正在解析JSON,您可以在JSON docs中添加在解析时符号化键值的选项:
hash = JSON.parse(json_data, symbolize_names: true)
https://stackoverflow.com/questions/8379596
复制相似问题