class Struct - json: Ruby Standard Library Documentation

# class Struct

### Public Class Methods

json_create(object) click to toggle source

See `as_json`.

    # File json/lib/json/add/struct.rb, line 9
    def self.json_create(object)
      new(*object['v'])
    end

### Public Instance Methods

as_json(*) click to toggle source

Methods `Struct#as_json` and `Struct.json_create` may be used to serialize and deserialize a Struct object; see Marshal.

Method `Struct#as_json` serializes `self`, returning a 2-element hash representing `self`:

    require 'json/add/struct'
    Customer = Struct.new('Customer', :name, :address, :zip)
    x = Struct::Customer.new.as_json
    # => {"json_class"=>"Struct::Customer", "v"=>[nil, nil, nil]}

Method `JSON.create` deserializes such a hash, returning a Struct object:

    Struct::Customer.json_create(x)
    # => #<struct Struct::Customer name=nil, address=nil, zip=nil>

    # File json/lib/json/add/struct.rb, line 30
    def as_json(*)
      klass = self.class.name
      klass.to_s.empty? and raise JSON::JSONError, "Only named structs are supported!"
      {
        JSON.create_id => klass,
        'v'            => values,
      }
    end

to_json(*args) click to toggle source

Returns a `JSON` string representing `self`:

    require 'json/add/struct'
    Customer = Struct.new('Customer', :name, :address, :zip)
    puts Struct::Customer.new.to_json

Output:

    {"json_class":"Struct","t":{'name':'Rowdy',"age":null}}

    # File json/lib/json/add/struct.rb, line 49
    def to_json(*args)
      as_json.to_json(*args)
    end