JSONファイルから取得したハッシュのキーがデフォルトで文字列だったのでシンボルにしたい。
結論
JSON.load
、JSON.parse
共にsymbolize_names
オプションをtrue
にするJSON.load
のみ追加でproc
をnil
、create_additions
オプションをfalse
にする
JSONファイルから読み込んだハッシュのキーをシンボルにする
読み込み用のdata.json
をmain.rb
で読み込んで出力してみます。
// data.json { "memos": [ { "id": 1, "title": "Title 1", "content": "Content 1" }, { "id": 2, "title": "Title 2", "content": "Content 2" } ] }
require 'json'
でJSONモジュールを読み込みJSON.load
、JSON.parse
のオプションにsymbolize_names: true
を追加JSON.load
の場合はsymbolize_names
オプション追加時にはproc
、create_additions
の指定も必須
# main.rb require 'json' # JSON.load file = File.open('data.json') use_json_load = JSON.load(file, nil, create_additions: false, symbolize_names: true) p use_json_load # JSON.parse string = File.read('data.json') use_json_parse = JSON.parse(string, symbolize_names: true) p use_json_parse
出力結果はどちらも同じです。
$ ruby main.rb {:memos=>[{:id=>1, :title=>"Title 1", :content=>"Content 1"}, {:id=>2, :title=>"Title 2", :content=>"Content 2"}]} {:memos=>[{:id=>1, :title=>"Title 1", :content=>"Content 1"}, {:id=>2, :title=>"Title 2", :content=>"Content 2"}]}
まとめ
JSON.load
とJSON.parse
のオプションの違いに気付けなかったので理解までちょっと時間が掛かってしまいました。
JSONファイルを読み込みハッシュとしてデータを扱う場合はおそらく文字列よりもシンボルの方が使いやすいと思うので記述の短いJSON.parse
を使った方が良いかもしれません。
参照
JSON.#load (Ruby 3.1 リファレンスマニュアル)
JSON.#parse (Ruby 3.1 リファレンスマニュアル)
JSONファイルの値を取り出したい。(おまけ:binding.irbの使い方 | FJORD BOOT CAMP(フィヨルドブートキャンプ)