あまブログ

ドキドキ......ドキドキ2択クイ〜〜〜〜〜〜〜ズ!!

【Ruby】JSON.parseエラー対処【no implicit conversion of File into String (TypeError)】

バージョン情報

  • 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) } #=> ファイルの内容

【参考】