バージョン情報
- Ruby:3.1.0
- robocop:1.32.0
経緯
以下のような、JSONファイルを読み込むコードを書いていた。
require 'json' file_path = "test.json" p File.open(file_path) { |f| JSON.load(f) } #=> ファイルの内容
これをrubocopでチェックすると以下の警告文が表示された。
Security/JSONLoad: Prefer JSON.parse over JSON.load.
JSON.load()ではなくJSON.parse()を使えと言っている。
以下のようにJSON.parse()
を使うように修正したところエラーが発生した。
require 'json' file_path = "test.json" p File.open(file_path) { |f| JSON.parse(f) } #=> no implicit conversion of File into String (TypeError)
エラー対処法
JSON.parse()
は引数に文字列を指定する必要があり、引数にファイルは指定できない。
なので、先ほどのコードを以下のように修正すると上手くいく。
require 'json' file_path = "test.json" p File.open(file_path) { |f| JSON.parse(f.read) } #=> ファイルの内容
【参考】