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

class JSON::Parser

[edit]

aliases: JSON::Ext::Parser

要約

目次

特異メソッド
インスタンスメソッド

特異メソッド

new(source, options => {}) -> JSON::ParserRuby 1.9.3 から[permalink][rdoc][edit]

パーサを初期化します。

第二引数のハッシュには以下のキーを指定できます。

:max_nesting

データ構造のネストの深さの最大値を指定します。デフォルトは 19 です。チェックを無効にするにはゼロまたは偽を指定してください。

:allow_nan

真を指定すると [RFC4627] を無視して NaN, Infinity, -Infinity をパースエラーにしません。デフォルトは偽です。

:create_additions

偽を指定するとマッチするクラスや ID があっても付加情報を生成しません。デフォルトは真です。

:object_class

JSON のオブジェクトを変換するクラスを指定します。デフォルトは Hash です。

:array_class

JSON の配列を変換するクラスを指定します。デフォルトは Array です。

[PARAM] source:
パーサの元となる文字列を指定します。
[PARAM] options:
オプションを指定するためのハッシュです。
require 'json'

parser = JSON::Parser.new(DATA.read)
print parser.source

# => {
# =>   "Tanaka": {
# =>     "name":"tanaka",
# =>     "age":20
# =>   },
# =>   "Suzuki": {
# =>     "name":"suzuki",
# =>     "age":25
# =>   }
# => }

__END__
{
  "Tanaka": {
    "name":"tanaka",
    "age":20
  },
  "Suzuki": {
    "name":"suzuki",
    "age":25
  }
}
例 object_class を指定する
require 'json'

class Person
  attr_accessor :name, :age

  def []=(key, value)
    instance_variable_set("@#{key}", value)
  end
end

parser = JSON::Parser.new(DATA.read, object_class: Person)
person = parser.parse
person.class # => Person
person.name  # => "tanaka"
person.age   # => 20

__END__
{
  "name":"tanaka",
  "age":20
}
parse(source, options) -> objectRuby 3.4 から[permalink][rdoc][edit]

JSON::Parser.new(source, options).parse と同様に、source をパースしてその結果を返します。JSON::Parser.new でインスタンスを作らずに直接パースできる分、高速です。

[PARAM] source:
パースする文字列を指定します。
[PARAM] options:
オプションを指定するためのハッシュです。nil も指定できます。指定可能なオプションは JSON::Parser.new と同様です。
require "json"

p JSON::Parser.parse(%q({"a":1}), {})                    # => {"a" => 1}
p JSON::Parser.parse(%q({"a":1}), symbolize_names: true) # => {a: 1}

[SEE_ALSO] JSON::Parser.new

インスタンスメソッド

parse -> objectRuby 1.9.3 から[permalink][rdoc][edit]

現在のソースをパースして結果を Ruby のオブジェクトとして返します。

require 'json'

class Person
  attr_accessor :name, :age

  def []=(key, value)
    instance_variable_set("@#{key}", value)
  end
end

parser = JSON::Parser.new(DATA.read, object_class: Person)
person = parser.parse
person.class # => Person
person.name  # => "tanaka"
person.age   # => 20

__END__
{
  "name":"tanaka",
  "age":20
}

[SEE_ALSO] JSON::Parser#source

source -> StringRuby 1.9.3 から[permalink][rdoc][edit]

現在のソースのコピーを返します。

require 'json'

parser = JSON::Parser.new(DATA.read)
print parser.source

# => {
# =>   "Tanaka": {
# =>     "name":"tanaka",
# =>     "age":20
# =>   },
# =>   "Suzuki": {
# =>     "name":"suzuki",
# =>     "age":25
# =>   }
# => }

__END__
{
  "Tanaka": {
    "name":"tanaka",
    "age":20
  },
  "Suzuki": {
    "name":"suzuki",
    "age":25
  }
}