LoginSignup
51
34

Hashのキーを文字列からシンボルに変換する

Last updated at Posted at 2015-01-06

JSONのパースしたときにキーがSymbolじゃなくて困ったのでメモ。
railsだとHash#symbolize_keysがあるけど、rails無しで。

def symbolize_keys(hash)
  hash.map{|k,v| [k.to_sym, v] }.to_h
end

hash = {'key':'value', 'key2':'value2'}

symbolize_keys(hash) #=> {:key=>"value", :key2=>"value2"}

Array#to_hはRuby 2.1からの機能なので古い環境では動きません。
hash.inject({}){|h, (k, v)| h[k.to_sym] = v; h}みたいにするといいかも。

追記:
コメントで教えていただきました。
Hash#.[]を使ってHash[ h.map{|k,v| [k.to_sym, v] } ]とする方法もあります。

追記2:
コメントで教えていただきました。

そもそも、JSONのパースで上記のようなことをする必要はありませんでした。
JSON.parsesymbolize_names: trueというオプションを渡すだけです。
ドキュメントはこちら: module function JSON.#parse

JSON.parse('{"key": {"key2": "value2"}}', symbolize_names: true)
#=> {:key=>{:key2=>"value2"}}

参考:
Ruby - Hash#map は Hash を返さない - Qiita

51
34
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
51
34