struct

JSON::Any

Inherits Struct / Value / Object

JSON::Any is a convenient wrapper around all possible JSON types (JSON::Any::Type) and can be used for traversing dynamic or unknown JSON structures.

require "json"

obj = JSON.parse(%({"access": [{"name": "mapping", "speed": "fast"}, {"name": "any", "speed": "slow"}]}))
obj["access"][1]["name"].as_s  # => "any"
obj["access"][1]["speed"].as_s # => "slow"

Note that methods used to traverse a JSON structure, #[] and #[]?, always return a JSON::Any to allow further traversal. To convert them to String, Int32, etc., use the as_ methods, such as #as_s, #as_i, which perform a type check against the raw underlying value. This means that invoking #as_s when the underlying value is not a String will raise: the value won't automatically be converted (parsed) to a String. There are also nil-able variants (#as_i?, #as_s?, ...), which return nil when the underlying value type won't match.

Constructors

new(raw : Type)

Creates a JSON::Any that wraps the given value.

Source
new(raw : Int) : self

Creates a JSON::Any that wraps the given value.

Source
new(raw : Float) : self

Creates a JSON::Any that wraps the given value.

Source
new(pull : JSON::PullParser) : self

Reads a JSON::Any value from the given pull parser.

Source

Instance methods

==(other : JSON::Any)

Returns true if both self and other's raw object are equal.

Source
==(other)

Returns true if the raw object is equal to other.

Source
[](index : Int) : JSON::Any

Assumes the underlying value is an Array and returns the element at the given index. Raises if the underlying value is not an Array.

Source
[](key : String) : JSON::Any

Assumes the underlying value is a Hash and returns the element with the given key. Raises if the underlying value is not a Hash.

Source
[]?(index : Int) : JSON::Any | Nil

Assumes the underlying value is an Array and returns the element at the given index, or nil if out of bounds. Raises if the underlying value is not an Array.

Source
[]?(key : String) : JSON::Any | Nil

Assumes the underlying value is a Hash and returns the element with the given key, or nil if the key is not present. Raises if the underlying value is not a Hash.

Source
as_a

Checks that the underlying value is Array, and returns its value. Raises otherwise.

Source
as_a?

Checks that the underlying value is Array, and returns its value. Returns nil otherwise.

Source
as_bool

Checks that the underlying value is Bool, and returns its value. Raises otherwise.

Source
as_bool?

Checks that the underlying value is Bool, and returns its value. Returns nil otherwise.

Source
as_f

Checks that the underlying value is Float (or Int), and returns its value as an Float64. Raises otherwise.

Source
as_f32

Checks that the underlying value is Float (or Int), and returns its value as an Float32. Raises otherwise.

Source
as_f32?

Checks that the underlying value is Float (or Int), and returns its value as an Float32. Returns nil otherwise.

Source
as_f?

Checks that the underlying value is Float (or Int), and returns its value as an Float64. Returns nil otherwise.

Source
as_h

Checks that the underlying value is Hash, and returns its value. Raises otherwise.

Source
as_h?

Checks that the underlying value is Hash, and returns its value. Returns nil otherwise.

Source
as_i

Checks that the underlying value is Int, and returns its value as an Int32. Raises otherwise.

Source
as_i64

Checks that the underlying value is Int, and returns its value as an Int64. Raises otherwise.

Source
as_i64?

Checks that the underlying value is Int, and returns its value as an Int64. Returns nil otherwise.

Source
as_i?

Checks that the underlying value is Int, and returns its value as an Int32. Returns nil otherwise.

Source
as_nil

Checks that the underlying value is Nil, and returns nil. Raises otherwise.

Source
as_s

Checks that the underlying value is String, and returns its value. Raises otherwise.

Source
as_s?

Checks that the underlying value is String, and returns its value. Returns nil otherwise.

Source
clone

Returns a new JSON::Any instance with the raw value cloneed.

Source
dig(index_or_key : Int | String, *subkeys : Int | String) : JSON::Any

Traverses the depth of a structure and returns the value, otherwise raises.

Source
dig?(index_or_key : Int | String, *subkeys : Int | String) : JSON::Any | Nil

Traverses the depth of a structure and returns the value. Returns nil if not found.

Source
dup

Returns a new JSON::Any instance with the raw value duped.

Source
hash(hasher)

See Object#hash(hasher)

Source
inspect(io : IO) : Nil

Appends this struct's name and instance variables names and values to the given IO.

struct Point
  def initialize(@x : Int32, @y : Int32)
  end
end

p1 = Point.new 1, 2
p1.to_s    # "Point(@x=1, @y=2)"
p1.inspect # "Point(@x=1, @y=2)"
Source
raw

Returns the raw underlying value.

Source
size

Assumes the underlying value is an Array or Hash and returns its size. Raises if the underlying value is not an Array or Hash.

Source
to_s(io : IO) : Nil

Same as #inspect(io).

Source
to_yaml(yaml : YAML::Nodes::Builder) : Nil
Source

Nested types