JSONファイルから取得したハッシュのキーをシンボルにする
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(フィヨルドブートキャンプ)