Data-Dumper-Compact
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/JSON/Dumper/Compact.pm view on Meta::CPAN
package JSON::Dumper::Compact;
use JSON::MaybeXS;
use Mu::Tiny;
use Class::Method::Modifiers;
our $VERSION = '0.006000';
$VERSION =~ tr/_//d;
extends 'Data::Dumper::Compact';
lazy json_obj => sub {
JSON->new
->allow_nonref(1)
->relaxed(1)
->filter_json_single_key_object(__bless__ => sub {
bless($_[0][1], $_[0][0]);
});
};
sub _json_decode { shift->json_obj->decode(@_) }
sub _build_dumper { my $j = shift->json_obj; sub { $j->encode($_[0]) } }
sub _format_el { shift->_format(@_).',' }
sub _format_hashkey { $_[0]->json_obj->encode($_[1]).':' }
sub _format_string { '"'.$_[1].'"' }
sub _format_thing { $_[1] }
around _expand_blessed => sub {
my ($orig, $self) = (shift, shift);
my ($blessed) = @_;
return $self->expand($blessed->TO_JSON) if $blessed->can('TO_JSON');
return $self->$orig(@_);
};
sub _format_blessed {
my ($self, $payload) = @_;
my ($content, $class) = @$payload;
$self->_format([ hash => [
[ '__bless__' ],
{ '__bless__' => [ array => [ [ string => $class ], $content ] ] },
] ]);
}
sub _format_ref {
my ($self, $payload) = @_;
my %subst = ('/' => '~1', '~' => '~0');
my @path = map { (my $x = $_->[1]) =~ s{[/~]}{$subst{$_}}eg; $x } @$payload;
return $self->format([ hash => [
[ '$ref' ],
{ '$ref' => [ string => join('/', '#', @path) ] },
] ]);
}
sub encode { shift->dump(@_) }
sub decode {
my ($self, $data, $opts) = @_;
$self->_optify($opts, _json_decode => $data);
}
1;
=head1 NAME
JSON::Dumper::Compact - JSON processing with L<Data::Dumper::Compact> aesthetics
=head1 SYNOPSIS
use JSON::Dumper::Compact 'jdc';
my $json = jdc($data);
=head1 DESCRIPTION
JSON::Dumper::Compact is a subclass of L<Data::Dumper::Compact> that turns
arrayrefs and hashrefs intead into JSON.
Deep data structures are rendered highly compactly:
[
"1556933590.65383", "Fri May 3 18:33:10 2019", 26794, "INFO", 3,
[ "SRV:8FB66F32" ], [ [
"/opt/voice-srvc-native/bin/async-srvc-att-gateway-poller", 33,
"NERV::Voice::SRV::Native::AsyncSRVATTGatewayPoller::main",
] ],
"batch_nena_messages returned", "OK", 6, { "FILENAME": "lqxw020323" },
1556933584, "lqxw020323",
]
To ease debugging, blessed references without a C<TO_JSON> method are
rendered as an object with a single two-element arrayref value:
{ "__bless__": [
"The::Class",
{ "the": "object" },
] }
=head1 METHODS
In addition to the L<Data::Dumper::Compact> methods, we provide:
view all matches for this distributionview release on metacpan - search on metacpan
( run in 0.778 second using v1.00-cache-2.02-grep-82fe00e-cpan-503542c4f10 )