【Rails】Hash(key)をシンボル形式にする
はじめに
せっかく調べたのに忘れてしまうため、メモを残しておく。
今回は、APIなどで取得したHash値をRails側で処理しやすいようにするため
deep_symbolize_keys
を調べました。
環境
- max OS X El Capitan
- Ruby 2.3.1
- Ruby on Rails 4.2.6
前提条件
やり方
サンプルデータ
{ "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を使うことになりそうです。