struct JSON::Any
inherits Struct
¶
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
.
Class methods¶
Methods¶
#[](index : Int) : JSON::Any
¶
(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
.
#[](key : String) : JSON::Any
¶
(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
.
#[]?(index : Int) : JSON::Any?
¶
(index : Int) : JSON::Any?
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
.
#[]?(key : String) : JSON::Any?
¶
(key : String) : JSON::Any?
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
.
#as_a : Array(Any)
¶
: Array(Any)
Checks that the underlying value is Array
, and returns its value.
Raises otherwise.
#as_a? : Array(Any)?
¶
: Array(Any)?
Checks that the underlying value is Array
, and returns its value.
Returns nil
otherwise.
#as_bool : Bool
¶
: Bool
Checks that the underlying value is Bool
, and returns its value.
Raises otherwise.
#as_bool? : Bool?
¶
: Bool?
Checks that the underlying value is Bool
, and returns its value.
Returns nil
otherwise.
#as_f : Float64
¶
View source
: Float64
#as_f32 : Float32
¶
View source
: Float32
#as_f32? : Float32?
¶
: Float32?
Checks that the underlying value is Float
, and returns its value as an Float32
.
Returns nil
otherwise.
#as_f? : Float64?
¶
: Float64?
Checks that the underlying value is Float
, and returns its value as an Float64
.
Returns nil
otherwise.
#as_h : Hash(String, Any)
¶
: Hash(String, Any)
Checks that the underlying value is Hash
, and returns its value.
Raises otherwise.
#as_h? : Hash(String, Any)?
¶
: Hash(String, Any)?
Checks that the underlying value is Hash
, and returns its value.
Returns nil
otherwise.
#as_i : Int32
¶
View source
: Int32
#as_i64 : Int64
¶
View source
: Int64
#as_i64? : Int64?
¶
View source
: Int64?
#as_i? : Int32?
¶
View source
: Int32?
#as_nil : Nil
¶
: Nil
Checks that the underlying value is Nil
, and returns nil
.
Raises otherwise.
#as_s : String
¶
: String
Checks that the underlying value is String
, and returns its value.
Raises otherwise.
#as_s? : String?
¶
: String?
Checks that the underlying value is String
, and returns its value.
Returns nil
otherwise.
#dig(index_or_key : String | Int, *subkeys) : JSON::Any
¶
(index_or_key : String | Int, *subkeys) : JSON::Any
Traverses the depth of a structure and returns the value, otherwise raises.
#dig?(index_or_key : String | Int, *subkeys) : JSON::Any?
¶
(index_or_key : String | Int, *subkeys) : JSON::Any?
Traverses the depth of a structure and returns the value.
Returns nil
if not found.