首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何转换Ruby散列,使其所有键都是符号?

如何转换Ruby散列,使其所有键都是符号?
EN

Stack Overflow用户
提问于 2011-12-05 07:56:14
回答 14查看 55.9K关注 0票数 59

我有一个Ruby散列,它看起来像这样:

{ "id" => "123", "name" => "test" }

我想将其转换为:

{ :id => "123", :name => "test" }
EN

回答 14

Stack Overflow用户

回答已采纳

发布于 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"}}
票数 71
EN

Stack Overflow用户

发布于 2015-05-05 17:36:49

如果您使用的是Rails >= 4,则可以使用:

hash.deep_symbolize_keys
hash.deep_symbolize_keys!

hash.deep_stringify_keys
hash.deep_stringify_keys!

请参阅http://apidock.com/rails/v4.2.1/Hash/deep_symbolize_keys

票数 46
EN

Stack Overflow用户

发布于 2014-09-25 22:25:37

如果您正在解析JSON,您可以在JSON docs中添加在解析时符号化键值的选项:

hash = JSON.parse(json_data, symbolize_names: true)
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8379596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档