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",
});

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.

string

number

bool

AUTHOR

Daisuke Murase <typester@cpan.org>

COPYRIGHT AND LICENSE

Copyright (c) 2012 Daisuke Murase. All rights reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

The full text of the license can be found in the LICENSE file included with this module.