コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Railsにおけるto_jsonとas_json

真面目に調べたことなかったのでメモ

環境

$ bin/rails -v
Rails 5.2.2.1

違い

as_jsonJSONに近いハッシュに変換してくれる、to_jsonはその更に先で完全に文字列化してくれる

対象となるハッシュは以下

demo_hash = {hoge: "huga"}
#=> {:hoge=>"huga"}

as_json

demo_hash.as_json
#=> {"hoge"=>"huga"}
[10] pry(main)> demo_hash.as_json.class
#=> Hash

キーがシンボルから文字列に代わったHashになったことがわかる

to_json

demo_hash.to_json
#=> "{\"hoge\":\"huga\"}"
[12] pry(main)> demo_hash.to_json.class
#=> String

ちゃんとエスケープされた文字列になっていることがわかる

余談:両方共使えるオプションがある

いらないものを削ったりするオプションがある

status = {name: "Taro", age: "20", password: "pass"}
#=> {:name=>"Taro", :age=>"20", :password=>"pass"}

# except: {{キー名}} で除外したものを出してくれる
status.as_json(except: :password)
#=> {"name"=>"Taro", "age"=>"20"}

# to_jsonでも使える
status.to_json(except: :password)
# => "{\"name\":\"Taro\",\"age\":\"20\"}"

参考リンク