高木のブログ

【Rails】symbolize_keysとstringify_keys

2020/12/14

ハッシュのキーをシンボルから文字列にしたい時があって調べたのでまとめる。

Rails

ハッシュのキーを文字列からシンボルに変える

{ 'name' => 'takagi', 'age' => 27 }.symbolize_keys
#=> {:name=>"takagi", :age=>27}

ハッシュのキーをシンボルから文字列に変える

{ :name => "takagi", :age => 27 }.stringify_keys
#=> {"name"=>"takagi", "age"=>27}

ネストがある場合

stringify_keysだと全部は変換できない

{ :name => "takagi", :age => 27, :other => { :hoge => 1 } }.stringify_keys
#=> {"name"=>"takagi", "age"=>27, "other"=>{:hoge=>1}}

{ :name => "takagi", :age => 27, :other => { :hoge => 1 } }.deep_stringify_keys
#=> {"name"=>"takagi", "age"=>27, "other"=>{"hoge"=>1}}

JSONをパースしたい時

symbolize_names: trueのオプションを付ける

JSON.parse('{"name": "takagi", "age": 27}')
#=> {"name"=>"takagi", "age"=>27}

JSON.parse('{"name": "takagi", "age": 27}', symbolize_names: true)
#=> {:name=>"takagi", :age=>27}

Ruby

transform_keysを使う

{ 'name' => 'takagi', 'age' => 27 }.transform_keys(&:to_sym)
#=> {:name=>"takagi", :age=>27}

{ :name => "takagi", :age => 27}.transform_keys(&:to_s)
#=> {"name"=>"takagi", "age"=>27}

参考


Written by ytkg, Twitter, GitHub

Pixela