JSON::Slurper - Convenient file slurping and spurting of data using JSON
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';
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. You can also pass along extra options to "read_text" in File::Slurper and "write_text" in File::Slurper, which are the two methods used by this module to read and write JSON.
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".
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
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
# 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 JSON::PP->new->ascii->pretty, 'ref.json'; # You can pass options to File::Slurper::read_text my $ref = slurp_json 'ref.json', $encoding, $crlf; # 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 first argument, as long as it is blessed and has encode and decode methods. You may also pass extra arguments at the end that will be passed on to "read_text" in File::Slurper. By default, no additional arguments are passed to "read_text" in File::Slurper. If no extension is present on the filename, .ext will be added.
encode
decode
.ext
# 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 JSON::PP->new->ascii->pretty, $ref, 'ref.json'; # You can pass options to File::Slurper::write_text spurt_json $ref, 'ref.json', $encoding, $crlf; # 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 first argument, as long as it is blessed and has encode and decode methods. You may also pass extra arguments at the end that will be passed on to "write_text" in File::Slurper. By default, no additional arguments are passed to "write_text" in File::Slurper. If no extension is present on the filename, .ext will be added.
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".
# 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'); # You can pass options to File::Slurper::read_text my $ref = $json_slurper->slurp('ref.json', $encoding, $crlf); # 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). You may pass extra arguments at the end that will be passed on to "read_text" in File::Slurper. By default, no additional arguments are passed to "read_text" in File::Slurper. If no extension is present on the filename, .ext will be added.
$json_slurper->spurt(\@array, 'array.json'); $json_slurper->spurt(\%hash, 'hash.json'); # You can pass options to File::Slurper::write_text $json_slurper->spurt($ref, 'ref.json', $encoding, $crlf); # 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). You may pass extra arguments at the end that will be passed on to "write_text" in File::Slurper. By default, no additional arguments are passed to "write_text" in File::Slurper. If no extension is present on the filename, .ext will be added.
More testing required.
Adam Hopkins <srchulo@cpan.org>
Copyright 2019- Adam Hopkins
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
File::Slurper
JSON::PP
Cpanel::JSON::XS
To install JSON::Slurper, copy and paste the appropriate command in to your terminal.
cpanm
cpanm JSON::Slurper
CPAN shell
perl -MCPAN -e shell install JSON::Slurper
For more information on module installation, please visit the detailed CPAN module installation guide.