真面目に調べたことなかったのでメモ
環境
$ bin/rails -v
Rails 5.2.2.1
違い
as_jsonはJSONに近いハッシュに変換してくれる、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\"}"