struct JSON::Any

Overview

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 aJSON::Any to allow further traversal. To convert them toString, Int32, etc., use theas_ 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 aString. There are also nil-able variants (#as_i?,#as_s?, ...), which returnnil when the underlying value type won't match.

Defined in:

json/any.cr

Constructors

Instance Method Summary

Instance methods inherited from struct Struct

==(other : YAML::Any)
==(other) : Bool
==
, hash(hasher) hash, inspect(io : IO) : Nil inspect, pretty_print(pp) : Nil pretty_print, to_s(io : IO) : Nil to_s

Class methods inherited from struct Struct

pre_initialize(address : Pointer) : Nil pre_initialize

Instance methods inherited from struct Value

==(other : Log::Metadata::Value)
==(other : JSON::Any)
==(other : YAML::Any)
==(other)
==
, dup dup

Instance methods inherited from class Object

! : Bool !, !=(other) !=, !~(other) !~, ==(other) ==, ===(other : JSON::Any)
===(other : YAML::Any)
===(other)
===
, =~(other) =~, as(type : Class) as, as?(type : Class) as?, class class, dup dup, hash(hasher)
hash
hash
, in?(collection : Object) : Bool
in?(*values : Object) : Bool
in?
, inspect(io : IO) : Nil
inspect : String
inspect
, is_a?(type : Class) : Bool is_a?, itself itself, nil? : Bool nil?, not_nil!(message)
not_nil!
not_nil!
, pretty_inspect(width = 79, newline = "\n", indent = 0) : String pretty_inspect, pretty_print(pp : PrettyPrint) : Nil pretty_print, responds_to?(name : Symbol) : Bool responds_to?, tap(&) tap, to_json(io : IO) : Nil
to_json : String
to_json
, to_pretty_json(indent : String = " ") : String
to_pretty_json(io : IO, indent : String = " ") : Nil
to_pretty_json
, to_s(io : IO) : Nil
to_s : String
to_s
, to_yaml(io : IO) : Nil
to_yaml : String
to_yaml
, try(&) try, unsafe_as(type : T.class) forall T unsafe_as

Class methods inherited from class Object

from_json(string_or_io : String | IO, root : String)
from_json(string_or_io : String | IO)
from_json
, from_yaml(string_or_io : String | IO) from_yaml

Macros inherited from class Object

class_getter(*names, &block) class_getter, class_getter!(*names) class_getter!, class_getter?(*names, &block) class_getter?, class_property(*names, &block) class_property, class_property!(*names) class_property!, class_property?(*names, &block) class_property?, class_setter(*names) class_setter, def_clone def_clone, def_equals(*fields) def_equals, def_equals_and_hash(*fields) def_equals_and_hash, def_hash(*fields) def_hash, delegate(*methods, to object) delegate, forward_missing_to(delegate) forward_missing_to, getter(*names, &block) getter, getter!(*names) getter!, getter?(*names, &block) getter?, property(*names, &block) property, property!(*names) property!, property?(*names, &block) property?, setter(*names) setter

Constructor Detail

def self.new(raw : Type) #

Creates aJSON::Any that wraps the given value.


def self.new(raw : Int) : self #

Creates aJSON::Any that wraps the given value.


def self.new(raw : Float) : self #

Creates aJSON::Any that wraps the given value.


def self.new(pull : JSON::PullParser) : self #

Reads aJSON::Any value from the given pull parser.


Instance Method Detail

def ==(other : JSON::Any) #

Returnstrue if bothself andother's raw object are equal.


def ==(other) #

Returnstrue if the raw object is equal toother.


def [](index : Int) : JSON::Any #

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


def [](key : String) : JSON::Any #

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


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

Assumes the underlying value is anArray and returns the element at the given index, ornil if out of bounds. Raises if the underlying value is not anArray.


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

Assumes the underlying value is aHash and returns the element with the given key, ornil if the key is not present. Raises if the underlying value is not aHash.


def as_a : Array(JSON::Any) #

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


def as_a? : Array(JSON::Any) | Nil #

Checks that the underlying value isArray, and returns its value. Returnsnil otherwise.


def as_bool : Bool #

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


def as_bool? : Bool | Nil #

Checks that the underlying value isBool, and returns its value. Returnsnil otherwise.


def as_f : Float64 #

Checks that the underlying value isFloat (orInt), and returns its value as anFloat64. Raises otherwise.


def as_f32 : Float32 #

Checks that the underlying value isFloat (orInt), and returns its value as anFloat32. Raises otherwise.


def as_f32? : Float32 | Nil #

Checks that the underlying value isFloat (orInt), and returns its value as anFloat32. Returnsnil otherwise.


def as_f? : Float64 | Nil #

Checks that the underlying value isFloat (orInt), and returns its value as anFloat64. Returnsnil otherwise.


def as_h : Hash(String, JSON::Any) #

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


def as_h? : Hash(String, JSON::Any) | Nil #

Checks that the underlying value isHash, and returns its value. Returnsnil otherwise.


def as_i : Int32 #

Checks that the underlying value isInt, and returns its value as anInt32. Raises otherwise.


def as_i64 : Int64 #

Checks that the underlying value isInt, and returns its value as anInt64. Raises otherwise.


def as_i64? : Int64 | Nil #

Checks that the underlying value isInt, and returns its value as anInt64. Returnsnil otherwise.


def as_i? : Int32 | Nil #

Checks that the underlying value isInt, and returns its value as anInt32. Returnsnil otherwise.


def as_nil : Nil #

Checks that the underlying value isNil, and returnsnil. Raises otherwise.


def as_s : String #

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


def as_s? : String | Nil #

Checks that the underlying value isString, and returns its value. Returnsnil otherwise.


def clone : JSON::Any #

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


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

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


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

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


def dup #

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


def hash(hasher) #

def inspect(io : IO) : Nil #
Description copied from struct Struct

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)"

def raw : Type #

Returns the raw underlying value.


def size : Int #

Assumes the underlying value is anArray orHash and returns its size. Raises if the underlying value is not anArray orHash.


def to_s(io : IO) : Nil #
Description copied from struct Struct

Same as#inspect(io).


def to_yaml(yaml : YAML::Nodes::Builder) : Nil #