Help language development. Donate to The Perl Foundation

JSON::Class cpan:JSTOWE last updated on 2020-09-27
# JSON::Class

A Role to allow Raku objects  to be constructed and serialised from/to JSON.

[![Build Status](](

## Synopsis


    use JSON::Class;

    class Something does JSON::Class {
        has Str $.foo;


    my Something $something = Something.from-json('{ "foo" : "stuff" }');


    my Str $json = $; # -> '{ "foo" : "stuff" }'


## Description

This is a simple role that provides methods to instantiate a class from a
JSON string that (hopefully,) represents it, and to serialise an object of
the class to a JSON string.  The JSON created from an instance should
round trip to a new instance with the same values for the "public attributes".
"Private" attributes (that is ones without accessors,) will be ignored for
both serialisation and de-serialisation.  The exact behaviour depends on that
of (JSON::Marshal)[] and
(JSON::Unmarshal)[] respectively.

If the ```:skip-null``` adverb is provided to ```to-json``` all attributes
without a defined value will be ignored in serialisation. If you need
finer grained control then you should apply the ```json-skip-null```
attribute trait (defined by ```JSON::Marshal``` ) to the traits you
want to skip if they aren't defined (```:json-skip``` will still have
the same effect though.)

The  (JSON::Marshal)[] and
(JSON::Unmarshal)[] provide traits
for controlling the unmarshalling/marshalling of specific attributes which are
re-exported by the module.

## Installation

Assuming you have a working Rakudo installation you should be able to install this with *zef* :

    # From the source directory
    zef install .

    # Remote installation

    zef install JSON::Class

## Support

Suggestions/patches are welcomed via github at:

## Licence

This is free software.

Please see the (LICENCE)[LICENCE] file in the distribution for the details.

© Jonathan Stowe 2015, 2016, 2017, 2019, 2020