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.parseにsymbolize_names: trueというオプションを渡すだけです。
ドキュメントはこちら: module function JSON.#parse
JSON.parse('{"key": {"key2": "value2"}}', symbolize_names: true)
#=> {:key=>{:key2=>"value2"}}