Ruby 4.0 リファレンスマニュアル

instance method JSON::State#strict

strict -> boolRuby 3.3 から[permalink][rdoc][edit]
strict? -> bool
strict=(enable)

JSON にネイティブ対応していない型のオブジェクトが現れたときの挙動を取得・設定します。

偽の場合(デフォルト)、nil・true・false・Integer・Float・String・Symbol・Array・Hash 以外のオブジェクトは to_json メソッドを呼び出して変換します (JSON::Ext::Generator::GeneratorMethods::Object#to_json は to_s の結果の文字列にします)。真の場合、そのようなオブジェクトが現れると JSON::GeneratorError が発生します(to_json メソッドを定義していても呼び出されません)。

真の場合、Symbol は値としても許可されます。ハッシュのキーは String と Symbol 以外だと JSON::GeneratorError が発生します。 JSON::State#as_json= で Proc を設定していれば、例外を発生させる代わりにそれで変換します。

[PARAM] enable:
真を指定すると、JSON にネイティブ対応していない型のオブジェクトが現れたときに例外を発生させるようになります。
[EXCEPTION] JSON::GeneratorError:
strict? が真の状態で、JSON にネイティブ対応していない型のオブジェクトを変換しようとした場合に発生します。
例
require "json"

state = JSON::State.new(strict: true)
p state.strict?                            # => true
begin
  JSON.generate([Object.new], state)
rescue JSON::GeneratorError => e
  p e.message # => "Object not allowed in JSON"
end
例 ハッシュのキー
require "json"

JSON.generate({1 => 2}, strict: true)                                        # ~> Integer not allowed as object key in JSON (JSON::GeneratorError)
JSON.generate({1 => 2}, strict: true, as_json: ->(obj, is_key) { obj.to_s }) # => "{\"1\":2}"

[SEE_ALSO] JSON::State#as_json=, JSON::Coder