logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

JSON::Types - variable type utility for JSON encoding

Author

       Daisuke Murase <typester@cpan.org>

Behaviours On Unexpected Args

string(undef),number(undef)returnsundef,bool(undef)returnsfalse.
       Passing undefined variable to string and number function is returns undef. If you doesn't prefer this,
       have to treat this like following:

           number $undef_possible_value // 0

       This code returns 0 if variable is undef.

   number($string)
       Passing not numeric variable to number function is returns 0, but a warning will be occurred.

Description

       The type mappings between JSON and Perl is annoying things. For example,

           use JSON;

           my $number = 123;

           warn "[DEBUG] number:$number\n" if $ENV{DEBUG};

           print encode_json([ $number ]);

       Output of this code depends on whether DEBUG environment is set or not.  If set, result is "[123]". If
       not to set, result is "["123"]".  This is normal behaviour on Perl though, it sometimes causes unexpected
       JSON results.

       There is a solution about this:

           print encode_json([ $number + 0 ]);

       This code always outputs "[123]".  But the code is a bit ugly and not readable at all.

       This module provides some functions to fix this variable types issue:

           number $foo;  # is always number
           string $foo;  # is always string
           bool   $foo;  # is always bool

       You can fix above code by using this module like this:

           use JSON;
           use JSON::Types;

           my $number = 123;

           warn "[DEBUG] number:$number\n" if $ENV{DEBUG};

           print encode_json([ number $number ]);

Functions

       There is three functions and all functions is exported by default.

       If you don't want this exported functions, pass empty list to use line:

           use JSON::Types ();

       You should specify full function name when this case, like "JSON::Types::number $foo" or etc.

   stringnumberbool

Name

       JSON::Types - variable type utility for JSON encoding

Synopsis

           # Export type functions by default
           use JSON;
           use JSON::Types;

           print encode_json({
               number => number "123",
               string => string 123,
               bool   => bool "True value",
           });
           # => {"number":123,"string":"123","bool":true}

           # Non export interface
           use JSON::Types ();

           print encode_json({
               number => JSON::Types::number "123",
               string => JSON::Types::string 123,
               bool   => JSON::Types::bool "True value",
           });

See Also