NAME

   JSON::Slurper - Convenient file slurping and spurting of data using
   JSON

STATUS

SYNOPSIS

     use JSON::Slurper qw(slurp_json spurt_json);

     my @people = (
       {
           name => 'Ralph',
           age => 19,
           favorite_food => 'Pizza',
       },
       {
           name => 'Sally',
           age => 23,
           favorite_food => 'French Fries',
       },
     );

     spurt_json @people, 'people.json';

     my @people_from_file = slurp_json 'people.json';

     # or get as a reference
     my $people_from_file = slurp_json 'people.json';

     # Same as above with Object-Oriented interface
     my $json_slurper = JSON::Slurper->new;

     $json_slurper->spurt(\@people, 'people.json');

     my @people_from_file = $json_slurper->slurp('people.json');

     # or get as a reference
     my $people_from_file = $json_slurper->slurp('people.json');

     # ".json" is added ad the file extension if no file extension is present.
     # This saves to people.json
     spurt_json @people, 'people';

     # This reads from people.json
     my @people_from_file = slurp_json 'people';

DESCRIPTION

   JSON::Slurper is a convenient way to slurp/spurt (read/write) Perl data
   structures to and from JSON files. It tries to do what you mean, and
   allows you to provide your own JSON encoder/decoder if necessary.

DEFAULT ENCODER

   Both the "FUNCTIONAL INTERFACE" and the "OBJECT-ORIENTED INTERFACE" use
   the same default encoders. You can provide your own encoder whether you
   use the "FUNCTIONAL INTERFACE" or the "OBJECT-ORIENTED INTERFACE".

Cpanel::JSON::XS

   If you have the recommended Cpanel::JSON::XS installed, this is the
   default used:

     Cpanel::JSON::XS->new
                     ->utf8
                     ->pretty
                     ->canonical
                     ->allow_nonref
                     ->allow_blessed
                     ->convert_blessed
                     ->escape_slash
                     ->stringify_infnan

JSON::PP

   If you are using JSON::PP, this is the default used:

     JSON::PP->new
             ->utf8
             ->pretty
             ->canonical
             ->allow_nonref
             ->allow_blessed
             ->convert_blessed
             ->escape_slash

FUNCTIONAL INTERFACE

slurp_json

   slurp_json $filename, [$json_encoder]

     # values can be returned as refs
     my $ref = slurp_json 'ref.json';

     # or as an array or hash
     my @array = slurp_json 'array.json';

     my %hash = slurp_json 'hash.json';

     # You can pass your own JSON encoder
     my $ref = slurp_json 'ref.json', JSON::PP->new->ascii->pretty;

     # If no extension is provided, ".json" will be used.
     # Reads from "ref.json";
     my $ref = slurp_json 'ref';

   This reads in JSON from a file and returns it as a Perl data structure
   (a reference, an array, or a hash). You can pass in your own JSON
   encoder/decoder as an optional argument, as long as it is blessed and
   has encode and decode methods. If no extension is present on the
   filename, .json will be added.

spurt_json

   spurt_json $data, $filename, [$json_encoder]

     # values can be passed as refs
     spurt_json \@array, 'ref.json';

     # or as an array or hash (still passed as refs using prototypes)
     spurt_json @array, 'array.json';

     spurt_json %hash, 'hash.json';

     # You can pass your own JSON encoder
     spurt_json $ref, 'ref.json', JSON::PP->new->ascii->pretty;

     # If no extension is provided, ".json" will be used.
     # Writes to "ref.json";
     spurt_json $ref, 'ref';

   This reads in JSON from a file and returns it as a Perl data structure
   (a reference, an array, or a hash). You can pass in your own JSON
   encoder/decoder as an optional argument, as long as it is blessed and
   has encode and decode methods. If no extension is present on the
   filename, .json will be added.

OBJECT-ORIENTED INTERFACE

new

     my $json_slurper = JSON::Slurper->new;

     # or pass in your own JSON encoder/decoder
     my $json_slurper = JSON::Slurper->new(JSON::PP->new->ascii->pretty);

   "new" creates a JSON::Slurper object that allows you to use the
   "OBJECT-ORIENTED INTERFACE" and call "slurp" and "spurt". You may pass
   in your own JSON encoder/decoder as long as it has encode and decode
   methods, like JSON::PP or Cpanel::JSON::XS, and this encoder will be
   used instead of the default one when calling "slurp" and "spurt".

slurp

   slurp($filename)

     # values can be returned as refs
     my $ref = $json_slurper->slurp('ref.json');

     # or as an array or hash
     my @array = $json_slurper->slurp('array.json');

     my %hash = $json_slurper->slurp('hash.json');

     # If no extension is provided, ".json" will be used.
     # Reads from "ref.json";
     my $ref = $json_slurper->slurp('ref');

   This reads in JSON from a file and returns it as a Perl data structure
   (a reference, an array, or a hash). If no extension is present on the
   filename, .json will be added.

spurt

   spurt($data, $filename)

     $json_slurper->spurt(\@array, 'array.json');

     $json_slurper->spurt(\%hash, 'hash.json');

     # If no extension is provided, ".json" will be used.
     # Writes to "ref.json";
     $json_slurper->spurt($ref, 'ref');

   This reads in JSON from a file and returns it as a Perl data structure
   (a reference, an array, or a hash). If no extension is present on the
   filename, .json will be added.

TODO

   More testing required.

AUTHOR

   Adam Hopkins <[email protected]>

COPYRIGHT

   Copyright 2019- Adam Hopkins

LICENSE

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

SEE ALSO

     * File::Slurper

     * JSON::PP

     * Cpanel::JSON::XS