Cpanel::JSON::XS::Type - Type support for JSON encode
use Cpanel::JSON::XS; use Cpanel::JSON::XS::Type encode_json([10, "10", 10.25], [JSON_TYPE_INT, JSON_TYPE_INT, JSON_TYPE_STRING]); # '[10,10,"10.25"]' encode_json([10, "10", 10.25], json_type_arrayof(JSON_TYPE_INT)); # '[10,10,10]' encode_json(1, JSON_TYPE_BOOL); # 'true' my $perl_struct = { key1 => 1, key2 => "2", key3 => 1 }; my $type_spec = { key1 => JSON_TYPE_STRING, key2 => JSON_TYPE_INT, key3 => JSON_TYPE_BOOL }; my $json_string = encode_json($perl_struct, $type_spec); # '{"key1":"1","key2":2,"key3":true}' my $perl_struct = { key1 => "value1", key2 => "value2", key3 => 0, key4 => 1, key5 => "string", key6 => "string2" }; my $type_spec = json_type_hashof(JSON_TYPE_STRING); my $json_string = encode_json($perl_struct, $type_spec); # '{"key1":"value1","key2":"value2","key3":"0","key4":"1","key5":"string","key6":"string2"}' my $perl_struct = { key1 => { key2 => [ 10, "10", 10.6 ] }, key3 => "10.5" }; my $type_spec = { key1 => json_type_anyof(JSON_TYPE_FLOAT, json_type_hashof(json_type_arrayof(JSON_TYPE_INT))), key3 => JSON_TYPE_FLOAT }; my $json_string = encode_json($perl_struct, $type_spec); # '{"key1":{"key2":[10,10,10]},"key3":10.5}'
This module provides stable JSON type support for the Cpanel::JSON::XS encoder which doesn't depend on any internal perl scalar flags or characteristics.
In most cases perl structures passed to encode_json come from other functions or from other modules and caller of Cpanel::JSON::XS module does not have control of internals or they are subject of change. So it is not easy to support enforcing types as described in the simple scalars section.
The function encode_json takes a perl structure as its input and optionally also a json type specification in the second parameter.
If the specification is not provided (or is undef) internal perl scalar flags are used for the resulting JSON type. The internal flags can be changed by perl itself, but also by external modules. Which means that types in resulting JSON string aren't stable. Specially it does not work reliable for dual vars and scalars which were used in both numeric and string operations. See simple scalars.
It enforces JSON boolean in resulting JSON, i.e. either true or false. For determining whether the scalar passed to the encoder is true, standard perl boolean logic is used.
true
false
It enforces JSON number without fraction part in the resulting JSON. Equivalent of perl function int is used for conversion.
It enforces JSON number with fraction part in the resulting JSON. Equivalent of perl operation +0 is used for conversion.
+0
It enforces JSON string type in the resulting JSON.
For each type, there also exists a type with the suffix _OR_NULL which encodes perl's undef into JSON null. Without type with suffix _OR_NULL perl's undef is converted to specific type according to above rules.
_OR_NULL
undef
null
The array must contain the same number of elements as in the perl array passed for encoding. Each element of the array describes the JSON type which is enforced for the corresponding element of the perl array.
This function takes a JSON type specification as its argument which is enforced for every element of the passed perl array.
Each hash value for corresponding key describes the JSON type specification for values of passed perl hash structure. Keys in hash which are not present in passed perl hash structure are simple ignored and not used.
This function takes a JSON type specification as its argument which is enforced for every value of passed perl hash structure.
This function takes a list of JSON type alternative specifications (maximally one scalar, one array, and one hash) as its input and the JSON encoder chooses one that matches.
Like json_type_anyof, but scalar can be only perl's undef.
json_type_anyof
Copyright (c) 2017, GoodData Corporation. All rights reserved.
This module is available under the same licences as perl, the Artistic license and the GPL.
To install Cpanel::JSON::XS, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Cpanel::JSON::XS
CPAN shell
perl -MCPAN -e shell install Cpanel::JSON::XS
For more information on module installation, please visit the detailed CPAN module installation guide.