in reply to Re: Int becomes String when I convert to json
in thread Int becomes String when I convert to json

I wonder if it's that a single digit it normally returns an int, but for a double digit a string.

I'll try Cpanel::JSON::XS::Type, but sort of irks me that this is a "thing."

Thank you
  • Comment on Re^2: Int becomes String when I convert to json

Replies are listed 'Best First'.
Re^3: Int becomes String when I convert to json
by choroba (Cardinal) on May 10, 2022 at 07:23 UTC
    > that a single digit it normally returns an int, but for a double digit a string.

    It's more complex than that. It depends on what you did with the value, on the version of Perl, what JSON module you use and its version, and sometimes even more. See my slides on the topic.

    map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]

      You really do attack the problem. But since I didn't explicitly see it, and am a bad reader, I just want to be sure that implementing...

      use Cpanel::JSON::XS::Type; sub makeJSON { (my $hashref) = @_; my $json = encode_json($hashref, {returnvalue => JSON_TYPE_INT, username => JSON_TYPE_STRING, userid => JSON_TYPE_STRING, status => JSON_TYPE_STRING, filename => JSON_TYPE_STRING, rawfilename => JSON_TYPE_STRING, ticket => JSON_TYPE_STRING, message => JSON_TYPE_STRING}); return $json; }

      ...covers my bases.

      Although am still a little offset that sometimes it turned it into a string, and sometimes not. But I'll get over it.

      Again, thanks for making slides to let people know.

        You also need to
        use Cpanel::JSON::XS;
        Its encode_json takes the extra parameter, the ::Type module just exports the types' names.

        BTW,

        (my $hashref) = @_;
        is usually written
        my ($hashref) = @_;
        so you can easily add more parameters if needed without having to move the parenthesis around.

        map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]