# NAME

MooseX::Role::JSONObject - create/store an object in a JSON-like hash

# SYNOPSIS

   package foo;

   use Moose;
   with 'MooseX::Role::JSONObject';

   ...

   my $obj = foo->new(...);
   my $data = $obj->to_json();
   ...
   my $newobj = foo->from_json($data);

# DESCRIPTION

The `MooseX::Role::JSONObject` role provides two methods, `to_json()`
and `from_json()`, for storing and retrieving a Moose object's attributes
and, if they are Moose objects themselves, their attributes recursively.
This is mainly useful in two cases: creating an object and all of its
attributes from a hash parsed from a JSON string or storing an object and
all its attributes as a hash to be written to a JSON string.

# METHODS

The `MooseX::Role::JSONObject` role provides two methods:

- `to_json()`

   The `to_json()` method takes no parameters and returns a hash reference
   containing the object's data.

- `from_json($data)`

   The `from_json()` class method creates a new object with the specified
   values for its attributes.  If any of its attributes are Moose objects,
   `from_json()` will create new instances for those recursively and
   populate them from the data.

   Currently the `from_json()` method always creates a new object; even
   though it may be invoked on an already existing object instance, it will
   not modify the instance's attributes, but return a new one instead.

# SEE ALSO

[MooseX::Role::JSONObject::Meta::Trait](https://metacpan.org/pod/MooseX::Role::JSONObject::Meta::Trait)

# LICENSE

Copyright (C) 2015  Peter Pentchev <[email protected]>

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

# AUTHOR

Peter Pentchev <[email protected]>