読者です 読者をやめる 読者になる 読者になる

【Rails】Hash(key)をシンボル形式にする

はじめに

せっかく調べたのに忘れてしまうため、メモを残しておく。

今回は、APIなどで取得したHash値をRails側で処理しやすいようにするため
deep_symbolize_keysを調べました。

環境

前提条件

  • Railsアプリケーションのひな形が作成された状態で、Railsコンソールが起動できること

やり方

サンプルデータ

{
    "name": "Taro Tanaka",
    "gender": "male",
    "age": 24,
    "frends": [
        {
            "name": "Hanako Tanaka",
            "state": "NY"
        },
        {
            "name": "Jiro Tanaka",
            "state": "LA"
        }
    ]
}

実行

[1] pry(main)> response = {"name"=>"Taro Tanaka", "gender"=>"male", "age"=>24, "frends"=>[{"name"=>"Hanako Tanaka", "state"=>"NY"}, {"name"=>"Jiro Tanaka", "state"=>"LA"}]}
=> {"name"=>"Taro Tanaka", "gender"=>"male", "age"=>24, "frends"=>[{"name"=>"Hanako Tanaka", "state"=>"NY"}, {"name"=>"Jiro Tanaka", "state"=>"LA"}]}
[2] pry(main)> response.deep_symbolize_keys
=> {:name=>"Taro Tanaka", :gender=>"male", :age=>24, :frends=>[{:name=>"Hanako Tanaka", :state=>"NY"}, {:name=>"Jiro Tanaka", :state=>"LA"}]}
[3] pry(main)>

おぉ、シンボル化されたものになりました。
ちなみに「deep」とあるので、deepではないものを使うとどうなるか確認します。

[3] pry(main)> response.symbolize_keys
=> {:name=>"Taro Tanaka", :gender=>"male", :age=>24, :frends=>[{"name"=>"Hanako Tanaka", "state"=>"NY"}, {"name"=>"Jiro Tanaka", "state"=>"LA"}]}
[4] pry(main)>

なるほど、配列化されたところはそのままということですね。
基本的にはすべてシンボル化するはずなので、deep_symbolize_keysを使うことになりそうです。

参考資料

deep_symbolize_keys (Hash) - APIdock