RubyのJSONライブラリのJSON.load
とJSON.parse
の違いを調べた。
結論
引数によって使い分ける。
JSONファイルをRubyで読み込む
読み込み用の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'
を忘れないように記述。
# main.rb require 'json' # JSON.load file = File.open('data.json') use_json_load = JSON.load(file) p use_json_load # JSON.parse string = File.read('data.json') use_json_parse = JSON.parse(string) 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ファイルから読み込んだデータのキーが文字列になっていますが、シンボルとして読み込みたい場合はオプションにsymbolize_names: true
を追加することで可能になります。
まとめ
JSON.load
もJSON.parse
もどちらもだいたい同じことができそう。symbolize_names
オプションの追加の際の記述が少し異なるようで、実際の使い分けはオプション追加時に書きやすい方を選択することになりそう。
参照
module JSON (Ruby 3.1 リファレンスマニュアル)
module JSON (Ruby 3.1 リファレンスマニュアル)