in reply to Re: JSON.pm and mod_perl
in thread JSON.pm and mod_perl

Thanks for the reply. So, with my old code (just using the JSON module), I was using:

True and false:
$values->{foo} = JSON::true(); $values->{foo2} = JSON::false();
...and then encoding them with:

use JSON; my $json = JSON->new; $json->allow_blessed(1); print $json->encode($values);


With the new code (using just JSON::Tiny), I was simply doing:
$values->{foo} = JSON::Tiny->true; $values->{foo2} = JSON::Tiny->false;
..and then to encode:

print encode_json($values);

..and also tried:

print to_json($values);

I read about the threading issue here: http://www.perlmonks.org/?node_id=1021294

Cheers

Andy

Replies are listed 'Best First'.
Re^3: JSON.pm and mod_perl
by Your Mother (Archbishop) on Mar 30, 2016 at 15:05 UTC

    Hmmm. Real bug, looks like(?). I don't have a modperl install to play with though so can't comment on that.

    Since the string allow_blessed does not appear in JSON::Tiny I have to assume you are still loading JSON somewhere. You'll either need to comb through code/%INC to find and remove it or perhaps fully qualify your calls to JSON::Tiny::encode_json() etc.

    Sidenote: you do not need allow_blessed to be true if working with JSON bools. Setting it true in general is probably a bad practice. Throwing around objects can mean revealing much more information than intended. You might, for example, send a list of user objects to the webpage via ajax and end up showing private information that is in the object like addresses or real names when you just meant to show username and webpage.

    perl -MJSON -le 'print encode_json({o=>JSON::true()})' {"o":true}
      Thanks for the reply. I had a play with it, and you are indeed correct - I had the JSON module loaded further up the script, which would have been clashing with the JSON::Tiny functions. Cleaned that up, and works now :)

      >>Sidenote: you do not need allow_blessed to be true if working with JSON bools. Setting it true in general is probably a bad practice. Throwing around objects can mean revealing much more information than intended. You might, for example, send a list of user objects to the webpage via ajax and end up showing private information that is in the object like addresses or real names when you just meant to show username and webpage.<<

      Yeah - I'm not too sure why it brought up that error (we had to update the code from a basic JSON->encode_json($var), to the more complex code you see above, as it kept (seemingly randomly) complaining about allow_blessed. I guess that could also be something to do with mod_perl as well (not seen that error since we updated it though)

      Cheers

      Andy

        FWIW, this is likely why–

        perl -MJSON -MJSON::Tiny -le 'print encode_json([JSON::Tiny::true()])' encountered object 'JSON::Tiny::_Bool=SCALAR(0x9401c88)', but neither +allow_blessed, convert_blessed nor allow_tags settings are enabled (o +r TO_JSON/FREEZE method missing) at -e line 1.