[pm-h] JSON:PP compatibility issue with JSON::XS::Boolean
Reini Urban
reini.urban at gmail.com
Thu Jan 14 14:54:00 PST 2016
Everyone has those problems, that's why you should use Cpanel::JSON::XS
instead
On Jan 14, 2016 22:36, "Michael R. Davis via Houston" <houston at pm.org>
wrote:
> Perl Folks,
> I have a compatibility issue with JSON::PP and JSON::XS that I just cannot
> figure out.
>
> When encoding a JSON::XS::Boolean object with JSON::PP, I'm getting JSON
> "null" instead of JSON "true" or "false". I Googled but could not find
> anything on this issue.
>
> I have to use JSON::PP for it's sort_by capability in sending JSON but I
> use JSON::XS for performance in decoding.
>
> This is my reduced code to expose the issue
>
> my $json=JSON::PP->new->allow_nonref->allow_blessed;
> #limit data to the single Boolean for test case
> $data_input = $data_input->{"aZone"}->{"IsActive"};
> print ref($json), "\n";
> print Dumper($data_input);
> my $json_input = $json->encode($data_input);
> print $json_input ,"\n";
> exit;
> This shows the encode method returns a "null" when I expect a "true".
>
> JSON::PP
> $VAR1 = bless( do{\(my $o = 1)}, 'JSON::XS::Boolean' );
> null
>
> I tried to reproduce but I cannot with a simple script so I'm turning to
> the Perl Mongers for any help?
>
> Mike
>
> Similar code that does not reproduce the issue.
>
> perl -e '
> use strict;
> use warnings;
> use Data::Dumper qw{Dumper};
> use JSON::XS qw{};
> use JSON::PP qw{};
> my $json=q[{"true":true,"false":false,"null":null}];
> my $xs=JSON::XS->new->allow_nonref;
> my $pp=JSON::PP->new->allow_nonref->allow_blessed->convert_blessed;
> print "XS: ", $xs->VERSION, "\n";
> print "PP: ", $pp->VERSION, "\n";
> my $data=$xs->decode($json);
> print Dumper($data);
> my $trip = $pp->encode($data);
> my $sorter={true=>1, false=>2, null=>3};
> $pp->sort_by(sub {$sorter->{$JSON::PP::a} <=> $sorter->{$JSON::PP::b}});
> print $json, "\n";
> '
> XS: 2.27
> PP: 2.24000
> $VAR1 = {
> 'false' => bless( do{\(my $o = 0)}, 'JSON::XS::Boolean' ),
> 'true' => bless( do{\(my $o = 1)}, 'JSON::XS::Boolean' ),
> 'null' => undef
> };
> {"true":true,"false":false,"null":null}
>
>
> _______________________________________________
> Houston mailing list
> Houston at pm.org
> http://mail.pm.org/mailman/listinfo/houston
> Website: http://houston.pm.org/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/houston/attachments/20160114/41b4576b/attachment.html>
More information about the Houston
mailing list