<html><head></head><body><div style="color:#000; background-color:#fff; font-family:Courier New, courier, monaco, monospace, sans-serif;font-size:16px"><div id="yui_3_16_0_1_1452803720507_3021" dir="ltr">Perl Folks,</div><div id="yui_3_16_0_1_1452803720507_3024" dir="ltr">I have a compatibility issue with JSON::PP and JSON::XS that I just cannot figure out.</div><div id="yui_3_16_0_1_1452803720507_3099" dir="ltr"> </div><div id="yui_3_16_0_1_1452803720507_3113" dir="ltr">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.</div><div id="yui_3_16_0_1_1452803720507_3112" dir="ltr"> </div><div id="yui_3_16_0_1_1452803720507_3100" dir="ltr">I have to use JSON::PP for it's sort_by capability in sending JSON but I use JSON::XS for performance in decoding.</div><div id="yui_3_16_0_1_1452803720507_3022" dir="ltr"> </div><div id="yui_3_16_0_1_1452803720507_3239" dir="ltr">This is my reduced code to expose the issue</div><div id="yui_3_16_0_1_1452803720507_3238" dir="ltr"> </div><div id="yui_3_16_0_1_1452803720507_3240" dir="ltr">  my $json=JSON::PP->new->allow_nonref->allow_blessed;<br id="yui_3_16_0_1_1452803720507_3247">  #limit data to the single Boolean for test case</div><div id="yui_3_16_0_1_1452803720507_3241" dir="ltr">  $data_input   = $data_input->{"aZone"}->{"IsActive"};<br id="yui_3_16_0_1_1452803720507_2966">  print ref($json), "\n";<br id="yui_3_16_0_1_1452803720507_2967">  print Dumper($data_input);<br id="yui_3_16_0_1_1452803720507_2968"></div><div id="yui_3_16_0_1_1452803720507_3020" dir="ltr">  my $json_input  = $json->encode($data_input);<br id="yui_3_16_0_1_1452803720507_2970"></div><div id="yui_3_16_0_1_1452803720507_3142" dir="ltr">  print $json_input ,"\n";<br id="yui_3_16_0_1_1452803720507_2972">  exit;<br id="yui_3_16_0_1_1452803720507_2973"></div><div id="yui_3_16_0_1_1452803720507_3214" dir="ltr">This shows the encode method returns a "null" when I expect a "true".</div><div id="yui_3_16_0_1_1452803720507_3212" dir="ltr"> </div><div id="yui_3_16_0_1_1452803720507_3157" dir="ltr">JSON::PP<br id="yui_3_16_0_1_1452803720507_2945">$VAR1 = bless( do{\(my $o = 1)}, 'JSON::XS::Boolean' );<br id="yui_3_16_0_1_1452803720507_2946">null</div><div id="yui_3_16_0_1_1452803720507_3191" dir="ltr"> </div><div id="yui_3_16_0_1_1452803720507_3172" dir="ltr">I tried to reproduce but I cannot with a simple script so I'm turning to the Perl Mongers for any help?</div><div id="yui_3_16_0_1_1452803720507_3192" dir="ltr"> </div><div id="yui_3_16_0_1_1452803720507_3173" dir="ltr">Mike</div><div id="yui_3_16_0_1_1452803720507_3280" dir="ltr"> </div><div id="yui_3_16_0_1_1452803720507_3333" dir="ltr">Similar code that does not reproduce the issue.</div><div id="yui_3_16_0_1_1452803720507_3332" dir="ltr"> </div><div id="yui_3_16_0_1_1452803720507_3286" dir="ltr">perl -e '<br id="yui_3_16_0_1_1452803720507_3287">use strict;<br id="yui_3_16_0_1_1452803720507_3288">use warnings;<br id="yui_3_16_0_1_1452803720507_3289">use Data::Dumper qw{Dumper};<br id="yui_3_16_0_1_1452803720507_3290">use JSON::XS qw{};<br id="yui_3_16_0_1_1452803720507_3291">use JSON::PP qw{};</div><div id="yui_3_16_0_1_1452803720507_3334" dir="ltr">my $json=q[{"true":true,"false":false,"null":null}];<br id="yui_3_16_0_1_1452803720507_3293">my $xs=JSON::XS->new->allow_nonref;<br id="yui_3_16_0_1_1452803720507_3294">my $pp=JSON::PP->new->allow_nonref->allow_blessed->convert_blessed;<br id="yui_3_16_0_1_1452803720507_3295">print "XS: ", $xs->VERSION, "\n";<br id="yui_3_16_0_1_1452803720507_3296">print "PP: ", $pp->VERSION, "\n";<br id="yui_3_16_0_1_1452803720507_3297">my $data=$xs->decode($json);<br id="yui_3_16_0_1_1452803720507_3298">print Dumper($data);<br id="yui_3_16_0_1_1452803720507_3299">my $trip = $pp->encode($data);<br id="yui_3_16_0_1_1452803720507_3300">my $sorter={true=>1, false=>2, null=>3};<br id="yui_3_16_0_1_1452803720507_3301">$pp->sort_by(sub {$sorter->{$JSON::PP::a} <=> $sorter->{$JSON::PP::b}});<br id="yui_3_16_0_1_1452803720507_3302">print $json, "\n";<br id="yui_3_16_0_1_1452803720507_3303">'<br id="yui_3_16_0_1_1452803720507_3304"></div><div id="yui_3_16_0_1_1452803720507_3335" dir="ltr">XS: 2.27<br id="yui_3_16_0_1_1452803720507_3305">PP: 2.24000<br id="yui_3_16_0_1_1452803720507_3306">$VAR1 = {<br id="yui_3_16_0_1_1452803720507_3307">          'false' => bless( do{\(my $o = 0)}, 'JSON::XS::Boolean' ),<br id="yui_3_16_0_1_1452803720507_3308">          'true' => bless( do{\(my $o = 1)}, 'JSON::XS::Boolean' ),<br id="yui_3_16_0_1_1452803720507_3309">          'null' => undef<br id="yui_3_16_0_1_1452803720507_3310">        };<br id="yui_3_16_0_1_1452803720507_3311">{"true":true,"false":false,"null":null}<br id="yui_3_16_0_1_1452803720507_3312"><br id="yui_3_16_0_1_1452803720507_2947"></div></div></body></html>