ここload
でソースコードをクリックしてください
# File ext/json/lib/json/common.rb, line 323
def load(source, proc = nil, options = {})
opts = load_default_options.merge options
if source.respond_to? :to_str
source = source.to_str
elsif source.respond_to? :to_io
source = source.to_io.read
elsif source.respond_to?(:read)
source = source.read
end
if opts[:allow_blank] && (source.nil? || source.empty?)
source = 'null'
end
result = parse(source, opts)
recurse_proc(result, &proc) if proc
result
end
メソッド内の最初の行:
opts = load_default_options.merge options
JSON#load_default_options
コンソールでを呼び出すことができます:
JSON.load_default_options
=> {:max_nesting=>false, :allow_nan=>true, :quirks_mode=>true, :create_additions=>true}
4 つのデフォルト オプションがあることがわかります。それらの意味は何ですか。ここをクリックしていくつか取得できます。
- max_nesting: 解析されたデータ構造で許可されるネストの最大深さ。:max_nesting => false で深度チェックを無効にします。デフォルトは 100 です。/
- allow_nan: true に設定すると、RFC 7159 を無視して NaN、Infinity、および -Infinity がパーサーによって解析されることを許可します。このオプションのデフォルトは false です。
- symbolize_names: true に設定すると、JSON オブジェクトの名前 (キー) のシンボルが返されます。それ以外の場合は、文字列が返されます。文字列がデフォルトです。
- create_additions: false に設定すると、一致するクラスと create_id が見つかった場合でも、パーサーは追加を作成しません。このオプションのデフォルトは false です。
- object_class: デフォルトはハッシュ
- array_class: デフォルトは配列
どうして
を参照してJSON#parse
、 のソース コードを参照してください。JSON#load
最後から 3 行目に がありresult = parse(source, opts)
ます。load
実際には にはparse
4 つのデフォルト オプションがあります。
それが理由です:
JSON.load("123") #=> 123
JSON.parse("123", quirks_mode: true) #=> 123
to_io
別の方法として、解析対象のオブジェクトがファイルであるという意味に応答する場合 load
でも、意味があります。ただし、パースはしません。