| Index: third_party/JSON/JSON-2.59/README
|
| diff --git a/third_party/JSON/JSON-2.59/README b/third_party/JSON/JSON-2.59/README
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..839c46212f4671ecd5b19b4534a134870b7c63b9
|
| --- /dev/null
|
| +++ b/third_party/JSON/JSON-2.59/README
|
| @@ -0,0 +1,1566 @@
|
| +JSON version 2.58
|
| +=================
|
| +
|
| +"JSON::PP" was earlier included in the "JSON" distribution,
|
| +but has since Perl 5.14 been a core module. For this reason,
|
| +"JSON::PP" was removed from the "JSON" distribution and can
|
| +now be found also in the Perl5 repository at
|
| +
|
| + http://perl5.git.perl.org/perl.git
|
| +
|
| +(The newest "JSON::PP" version still exists in CPAN.)
|
| +
|
| +Instead, the "JSON" distribution will include "JSON::backportPP"
|
| +for backwards computability. JSON.pm should thus work as it did before.
|
| +
|
| +=================
|
| +
|
| +INSTALLATION
|
| +
|
| +To install this module type the following:
|
| +
|
| + perl Makefile.PL
|
| + make
|
| + make test
|
| + make install
|
| +
|
| +if you use cpanm, can install JSON::XS at once.
|
| +
|
| + cpanm --with-recommends JSON
|
| +
|
| +
|
| +NAME
|
| + JSON - JSON (JavaScript Object Notation) encoder/decoder
|
| +
|
| +SYNOPSIS
|
| + use JSON; # imports encode_json, decode_json, to_json and from_json.
|
| +
|
| + # simple and fast interfaces (expect/generate UTF-8)
|
| +
|
| + $utf8_encoded_json_text = encode_json $perl_hash_or_arrayref;
|
| + $perl_hash_or_arrayref = decode_json $utf8_encoded_json_text;
|
| +
|
| + # OO-interface
|
| +
|
| + $json = JSON->new->allow_nonref;
|
| +
|
| + $json_text = $json->encode( $perl_scalar );
|
| + $perl_scalar = $json->decode( $json_text );
|
| +
|
| + $pretty_printed = $json->pretty->encode( $perl_scalar ); # pretty-printing
|
| +
|
| + # If you want to use PP only support features, call with '-support_by_pp'
|
| + # When XS unsupported feature is enable, using PP (de|en)code instead of XS ones.
|
| +
|
| + use JSON -support_by_pp;
|
| +
|
| + # option-acceptable interfaces (expect/generate UNICODE by default)
|
| +
|
| + $json_text = to_json( $perl_scalar, { ascii => 1, pretty => 1 } );
|
| + $perl_scalar = from_json( $json_text, { utf8 => 1 } );
|
| +
|
| + # Between (en|de)code_json and (to|from)_json, if you want to write
|
| + # a code which communicates to an outer world (encoded in UTF-8),
|
| + # recommend to use (en|de)code_json.
|
| +
|
| +VERSION
|
| + 2.58
|
| +
|
| + This version is compatible with JSON::XS 2.27 and later.
|
| +
|
| +NOTE
|
| + JSON::PP was earlier included in the "JSON" distribution, but has since
|
| + Perl 5.14 been a core module. For this reason, JSON::PP was removed from
|
| + the JSON distribution and can now be found also in the Perl5 repository
|
| + at
|
| +
|
| + * <http://perl5.git.perl.org/perl.git>
|
| +
|
| + (The newest JSON::PP version still exists in CPAN.)
|
| +
|
| + Instead, the "JSON" distribution will include JSON::backportPP for
|
| + backwards computability. JSON.pm should thus work as it did before.
|
| +
|
| +DESCRIPTION
|
| + ************************** CAUTION ********************************
|
| + * This is 'JSON module version 2' and there are many differences *
|
| + * to version 1.xx *
|
| + * Please check your applications using old version. *
|
| + * See to 'INCOMPATIBLE CHANGES TO OLD VERSION' *
|
| + *******************************************************************
|
| +
|
| + JSON (JavaScript Object Notation) is a simple data format. See to
|
| + <http://www.json.org/> and
|
| + "RFC4627"(<http://www.ietf.org/rfc/rfc4627.txt>).
|
| +
|
| + This module converts Perl data structures to JSON and vice versa using
|
| + either JSON::XS or JSON::PP.
|
| +
|
| + JSON::XS is the fastest and most proper JSON module on CPAN which must
|
| + be compiled and installed in your environment. JSON::PP is a pure-Perl
|
| + module which is bundled in this distribution and has a strong
|
| + compatibility to JSON::XS.
|
| +
|
| + This module try to use JSON::XS by default and fail to it, use JSON::PP
|
| + instead. So its features completely depend on JSON::XS or JSON::PP.
|
| +
|
| + See to "BACKEND MODULE DECISION".
|
| +
|
| + To distinguish the module name 'JSON' and the format type JSON, the
|
| + former is quoted by C<> (its results vary with your using media), and
|
| + the latter is left just as it is.
|
| +
|
| + Module name : "JSON"
|
| +
|
| + Format type : JSON
|
| +
|
| + FEATURES
|
| + * correct unicode handling
|
| +
|
| + This module (i.e. backend modules) knows how to handle Unicode,
|
| + documents how and when it does so, and even documents what "correct"
|
| + means.
|
| +
|
| + Even though there are limitations, this feature is available since
|
| + Perl version 5.6.
|
| +
|
| + JSON::XS requires Perl 5.8.2 (but works correctly in 5.8.8 or
|
| + later), so in older versions "JSON" should call JSON::PP as the
|
| + backend which can be used since Perl 5.005.
|
| +
|
| + With Perl 5.8.x JSON::PP works, but from 5.8.0 to 5.8.2, because of
|
| + a Perl side problem, JSON::PP works slower in the versions. And in
|
| + 5.005, the Unicode handling is not available. See to "UNICODE
|
| + HANDLING ON PERLS" in JSON::PP for more information.
|
| +
|
| + See also to "A FEW NOTES ON UNICODE AND PERL" in JSON::XS and
|
| + "ENCODING/CODESET_FLAG_NOTES" in JSON::XS.
|
| +
|
| + * round-trip integrity
|
| +
|
| + When you serialise a perl data structure using only data types
|
| + supported by JSON and Perl, the deserialised data structure is
|
| + identical on the Perl level. (e.g. the string "2.0" doesn't suddenly
|
| + become "2" just because it looks like a number). There *are* minor
|
| + exceptions to this, read the "MAPPING" section below to learn about
|
| + those.
|
| +
|
| + * strict checking of JSON correctness
|
| +
|
| + There is no guessing, no generating of illegal JSON texts by
|
| + default, and only JSON is accepted as input by default (the latter
|
| + is a security feature).
|
| +
|
| + See to "FEATURES" in JSON::XS and "FEATURES" in JSON::PP.
|
| +
|
| + * fast
|
| +
|
| + This module returns a JSON::XS object itself if available. Compared
|
| + to other JSON modules and other serialisers such as Storable,
|
| + JSON::XS usually compares favorably in terms of speed, too.
|
| +
|
| + If not available, "JSON" returns a JSON::PP object instead of
|
| + JSON::XS and it is very slow as pure-Perl.
|
| +
|
| + * simple to use
|
| +
|
| + This module has both a simple functional interface as well as an
|
| + object oriented interface interface.
|
| +
|
| + * reasonably versatile output formats
|
| +
|
| + You can choose between the most compact guaranteed-single-line
|
| + format possible (nice for simple line-based protocols), a pure-ASCII
|
| + format (for when your transport is not 8-bit clean, still supports
|
| + the whole Unicode range), or a pretty-printed format (for when you
|
| + want to read that stuff). Or you can combine those features in
|
| + whatever way you like.
|
| +
|
| +FUNCTIONAL INTERFACE
|
| + Some documents are copied and modified from "FUNCTIONAL INTERFACE" in
|
| + JSON::XS. "to_json" and "from_json" are additional functions.
|
| +
|
| + encode_json
|
| + $json_text = encode_json $perl_scalar
|
| +
|
| + Converts the given Perl data structure to a UTF-8 encoded, binary
|
| + string.
|
| +
|
| + This function call is functionally identical to:
|
| +
|
| + $json_text = JSON->new->utf8->encode($perl_scalar)
|
| +
|
| + decode_json
|
| + $perl_scalar = decode_json $json_text
|
| +
|
| + The opposite of "encode_json": expects an UTF-8 (binary) string and
|
| + tries to parse that as an UTF-8 encoded JSON text, returning the
|
| + resulting reference.
|
| +
|
| + This function call is functionally identical to:
|
| +
|
| + $perl_scalar = JSON->new->utf8->decode($json_text)
|
| +
|
| + to_json
|
| + $json_text = to_json($perl_scalar)
|
| +
|
| + Converts the given Perl data structure to a json string.
|
| +
|
| + This function call is functionally identical to:
|
| +
|
| + $json_text = JSON->new->encode($perl_scalar)
|
| +
|
| + Takes a hash reference as the second.
|
| +
|
| + $json_text = to_json($perl_scalar, $flag_hashref)
|
| +
|
| + So,
|
| +
|
| + $json_text = to_json($perl_scalar, {utf8 => 1, pretty => 1})
|
| +
|
| + equivalent to:
|
| +
|
| + $json_text = JSON->new->utf8(1)->pretty(1)->encode($perl_scalar)
|
| +
|
| + If you want to write a modern perl code which communicates to outer
|
| + world, you should use "encode_json" (supposed that JSON data are encoded
|
| + in UTF-8).
|
| +
|
| + from_json
|
| + $perl_scalar = from_json($json_text)
|
| +
|
| + The opposite of "to_json": expects a json string and tries to parse it,
|
| + returning the resulting reference.
|
| +
|
| + This function call is functionally identical to:
|
| +
|
| + $perl_scalar = JSON->decode($json_text)
|
| +
|
| + Takes a hash reference as the second.
|
| +
|
| + $perl_scalar = from_json($json_text, $flag_hashref)
|
| +
|
| + So,
|
| +
|
| + $perl_scalar = from_json($json_text, {utf8 => 1})
|
| +
|
| + equivalent to:
|
| +
|
| + $perl_scalar = JSON->new->utf8(1)->decode($json_text)
|
| +
|
| + If you want to write a modern perl code which communicates to outer
|
| + world, you should use "decode_json" (supposed that JSON data are encoded
|
| + in UTF-8).
|
| +
|
| + JSON::is_bool
|
| + $is_boolean = JSON::is_bool($scalar)
|
| +
|
| + Returns true if the passed scalar represents either JSON::true or
|
| + JSON::false, two constants that act like 1 and 0 respectively and are
|
| + also used to represent JSON "true" and "false" in Perl strings.
|
| +
|
| + JSON::true
|
| + Returns JSON true value which is blessed object. It "isa" JSON::Boolean
|
| + object.
|
| +
|
| + JSON::false
|
| + Returns JSON false value which is blessed object. It "isa" JSON::Boolean
|
| + object.
|
| +
|
| + JSON::null
|
| + Returns "undef".
|
| +
|
| + See MAPPING, below, for more information on how JSON values are mapped
|
| + to Perl.
|
| +
|
| +HOW DO I DECODE A DATA FROM OUTER AND ENCODE TO OUTER
|
| + This section supposes that your perl version is 5.8 or later.
|
| +
|
| + If you know a JSON text from an outer world - a network, a file content,
|
| + and so on, is encoded in UTF-8, you should use "decode_json" or "JSON"
|
| + module object with "utf8" enable. And the decoded result will contain
|
| + UNICODE characters.
|
| +
|
| + # from network
|
| + my $json = JSON->new->utf8;
|
| + my $json_text = CGI->new->param( 'json_data' );
|
| + my $perl_scalar = $json->decode( $json_text );
|
| +
|
| + # from file content
|
| + local $/;
|
| + open( my $fh, '<', 'json.data' );
|
| + $json_text = <$fh>;
|
| + $perl_scalar = decode_json( $json_text );
|
| +
|
| + If an outer data is not encoded in UTF-8, firstly you should "decode"
|
| + it.
|
| +
|
| + use Encode;
|
| + local $/;
|
| + open( my $fh, '<', 'json.data' );
|
| + my $encoding = 'cp932';
|
| + my $unicode_json_text = decode( $encoding, <$fh> ); # UNICODE
|
| +
|
| + # or you can write the below code.
|
| + #
|
| + # open( my $fh, "<:encoding($encoding)", 'json.data' );
|
| + # $unicode_json_text = <$fh>;
|
| +
|
| + In this case, $unicode_json_text is of course UNICODE string. So you
|
| + cannot use "decode_json" nor "JSON" module object with "utf8" enable.
|
| + Instead of them, you use "JSON" module object with "utf8" disable or
|
| + "from_json".
|
| +
|
| + $perl_scalar = $json->utf8(0)->decode( $unicode_json_text );
|
| + # or
|
| + $perl_scalar = from_json( $unicode_json_text );
|
| +
|
| + Or "encode 'utf8'" and "decode_json":
|
| +
|
| + $perl_scalar = decode_json( encode( 'utf8', $unicode_json_text ) );
|
| + # this way is not efficient.
|
| +
|
| + And now, you want to convert your $perl_scalar into JSON data and send
|
| + it to an outer world - a network or a file content, and so on.
|
| +
|
| + Your data usually contains UNICODE strings and you want the converted
|
| + data to be encoded in UTF-8, you should use "encode_json" or "JSON"
|
| + module object with "utf8" enable.
|
| +
|
| + print encode_json( $perl_scalar ); # to a network? file? or display?
|
| + # or
|
| + print $json->utf8->encode( $perl_scalar );
|
| +
|
| + If $perl_scalar does not contain UNICODE but $encoding-encoded strings
|
| + for some reason, then its characters are regarded as latin1 for perl
|
| + (because it does not concern with your $encoding). You cannot use
|
| + "encode_json" nor "JSON" module object with "utf8" enable. Instead of
|
| + them, you use "JSON" module object with "utf8" disable or "to_json".
|
| + Note that the resulted text is a UNICODE string but no problem to print
|
| + it.
|
| +
|
| + # $perl_scalar contains $encoding encoded string values
|
| + $unicode_json_text = $json->utf8(0)->encode( $perl_scalar );
|
| + # or
|
| + $unicode_json_text = to_json( $perl_scalar );
|
| + # $unicode_json_text consists of characters less than 0x100
|
| + print $unicode_json_text;
|
| +
|
| + Or "decode $encoding" all string values and "encode_json":
|
| +
|
| + $perl_scalar->{ foo } = decode( $encoding, $perl_scalar->{ foo } );
|
| + # ... do it to each string values, then encode_json
|
| + $json_text = encode_json( $perl_scalar );
|
| +
|
| + This method is a proper way but probably not efficient.
|
| +
|
| + See to Encode, perluniintro.
|
| +
|
| +COMMON OBJECT-ORIENTED INTERFACE
|
| + new
|
| + $json = JSON->new
|
| +
|
| + Returns a new "JSON" object inherited from either JSON::XS or JSON::PP
|
| + that can be used to de/encode JSON strings.
|
| +
|
| + All boolean flags described below are by default *disabled*.
|
| +
|
| + The mutators for flags all return the JSON object again and thus calls
|
| + can be chained:
|
| +
|
| + my $json = JSON->new->utf8->space_after->encode({a => [1,2]})
|
| + => {"a": [1, 2]}
|
| +
|
| + ascii
|
| + $json = $json->ascii([$enable])
|
| +
|
| + $enabled = $json->get_ascii
|
| +
|
| + If $enable is true (or missing), then the encode method will not
|
| + generate characters outside the code range 0..127. Any Unicode
|
| + characters outside that range will be escaped using either a single
|
| + \uXXXX or a double \uHHHH\uLLLLL escape sequence, as per RFC4627.
|
| +
|
| + If $enable is false, then the encode method will not escape Unicode
|
| + characters unless required by the JSON syntax or other flags. This
|
| + results in a faster and more compact format.
|
| +
|
| + This feature depends on the used Perl version and environment.
|
| +
|
| + See to "UNICODE HANDLING ON PERLS" in JSON::PP if the backend is PP.
|
| +
|
| + JSON->new->ascii(1)->encode([chr 0x10401])
|
| + => ["\ud801\udc01"]
|
| +
|
| + latin1
|
| + $json = $json->latin1([$enable])
|
| +
|
| + $enabled = $json->get_latin1
|
| +
|
| + If $enable is true (or missing), then the encode method will encode the
|
| + resulting JSON text as latin1 (or iso-8859-1), escaping any characters
|
| + outside the code range 0..255.
|
| +
|
| + If $enable is false, then the encode method will not escape Unicode
|
| + characters unless required by the JSON syntax or other flags.
|
| +
|
| + JSON->new->latin1->encode (["\x{89}\x{abc}"]
|
| + => ["\x{89}\\u0abc"] # (perl syntax, U+abc escaped, U+89 not)
|
| +
|
| + utf8
|
| + $json = $json->utf8([$enable])
|
| +
|
| + $enabled = $json->get_utf8
|
| +
|
| + If $enable is true (or missing), then the encode method will encode the
|
| + JSON result into UTF-8, as required by many protocols, while the decode
|
| + method expects to be handled an UTF-8-encoded string. Please note that
|
| + UTF-8-encoded strings do not contain any characters outside the range
|
| + 0..255, they are thus useful for bytewise/binary I/O.
|
| +
|
| + In future versions, enabling this option might enable autodetection of
|
| + the UTF-16 and UTF-32 encoding families, as described in RFC4627.
|
| +
|
| + If $enable is false, then the encode method will return the JSON string
|
| + as a (non-encoded) Unicode string, while decode expects thus a Unicode
|
| + string. Any decoding or encoding (e.g. to UTF-8 or UTF-16) needs to be
|
| + done yourself, e.g. using the Encode module.
|
| +
|
| + Example, output UTF-16BE-encoded JSON:
|
| +
|
| + use Encode;
|
| + $jsontext = encode "UTF-16BE", JSON::XS->new->encode ($object);
|
| +
|
| + Example, decode UTF-32LE-encoded JSON:
|
| +
|
| + use Encode;
|
| + $object = JSON::XS->new->decode (decode "UTF-32LE", $jsontext);
|
| +
|
| + See to "UNICODE HANDLING ON PERLS" in JSON::PP if the backend is PP.
|
| +
|
| + pretty
|
| + $json = $json->pretty([$enable])
|
| +
|
| + This enables (or disables) all of the "indent", "space_before" and
|
| + "space_after" (and in the future possibly more) flags in one call to
|
| + generate the most readable (or most compact) form possible.
|
| +
|
| + Equivalent to:
|
| +
|
| + $json->indent->space_before->space_after
|
| +
|
| + The indent space length is three and JSON::XS cannot change the indent
|
| + space length.
|
| +
|
| + indent
|
| + $json = $json->indent([$enable])
|
| +
|
| + $enabled = $json->get_indent
|
| +
|
| + If $enable is true (or missing), then the "encode" method will use a
|
| + multiline format as output, putting every array member or object/hash
|
| + key-value pair into its own line, identifying them properly.
|
| +
|
| + If $enable is false, no newlines or indenting will be produced, and the
|
| + resulting JSON text is guaranteed not to contain any "newlines".
|
| +
|
| + This setting has no effect when decoding JSON texts.
|
| +
|
| + The indent space length is three. With JSON::PP, you can also access
|
| + "indent_length" to change indent space length.
|
| +
|
| + space_before
|
| + $json = $json->space_before([$enable])
|
| +
|
| + $enabled = $json->get_space_before
|
| +
|
| + If $enable is true (or missing), then the "encode" method will add an
|
| + extra optional space before the ":" separating keys from values in JSON
|
| + objects.
|
| +
|
| + If $enable is false, then the "encode" method will not add any extra
|
| + space at those places.
|
| +
|
| + This setting has no effect when decoding JSON texts.
|
| +
|
| + Example, space_before enabled, space_after and indent disabled:
|
| +
|
| + {"key" :"value"}
|
| +
|
| + space_after
|
| + $json = $json->space_after([$enable])
|
| +
|
| + $enabled = $json->get_space_after
|
| +
|
| + If $enable is true (or missing), then the "encode" method will add an
|
| + extra optional space after the ":" separating keys from values in JSON
|
| + objects and extra whitespace after the "," separating key-value pairs
|
| + and array members.
|
| +
|
| + If $enable is false, then the "encode" method will not add any extra
|
| + space at those places.
|
| +
|
| + This setting has no effect when decoding JSON texts.
|
| +
|
| + Example, space_before and indent disabled, space_after enabled:
|
| +
|
| + {"key": "value"}
|
| +
|
| + relaxed
|
| + $json = $json->relaxed([$enable])
|
| +
|
| + $enabled = $json->get_relaxed
|
| +
|
| + If $enable is true (or missing), then "decode" will accept some
|
| + extensions to normal JSON syntax (see below). "encode" will not be
|
| + affected in anyway. *Be aware that this option makes you accept invalid
|
| + JSON texts as if they were valid!*. I suggest only to use this option to
|
| + parse application-specific files written by humans (configuration files,
|
| + resource files etc.)
|
| +
|
| + If $enable is false (the default), then "decode" will only accept valid
|
| + JSON texts.
|
| +
|
| + Currently accepted extensions are:
|
| +
|
| + * list items can have an end-comma
|
| +
|
| + JSON *separates* array elements and key-value pairs with commas.
|
| + This can be annoying if you write JSON texts manually and want to be
|
| + able to quickly append elements, so this extension accepts comma at
|
| + the end of such items not just between them:
|
| +
|
| + [
|
| + 1,
|
| + 2, <- this comma not normally allowed
|
| + ]
|
| + {
|
| + "k1": "v1",
|
| + "k2": "v2", <- this comma not normally allowed
|
| + }
|
| +
|
| + * shell-style '#'-comments
|
| +
|
| + Whenever JSON allows whitespace, shell-style comments are
|
| + additionally allowed. They are terminated by the first
|
| + carriage-return or line-feed character, after which more white-space
|
| + and comments are allowed.
|
| +
|
| + [
|
| + 1, # this comment not allowed in JSON
|
| + # neither this one...
|
| + ]
|
| +
|
| + canonical
|
| + $json = $json->canonical([$enable])
|
| +
|
| + $enabled = $json->get_canonical
|
| +
|
| + If $enable is true (or missing), then the "encode" method will output
|
| + JSON objects by sorting their keys. This is adding a comparatively high
|
| + overhead.
|
| +
|
| + If $enable is false, then the "encode" method will output key-value
|
| + pairs in the order Perl stores them (which will likely change between
|
| + runs of the same script).
|
| +
|
| + This option is useful if you want the same data structure to be encoded
|
| + as the same JSON text (given the same overall settings). If it is
|
| + disabled, the same hash might be encoded differently even if contains
|
| + the same data, as key-value pairs have no inherent ordering in Perl.
|
| +
|
| + This setting has no effect when decoding JSON texts.
|
| +
|
| + allow_nonref
|
| + $json = $json->allow_nonref([$enable])
|
| +
|
| + $enabled = $json->get_allow_nonref
|
| +
|
| + If $enable is true (or missing), then the "encode" method can convert a
|
| + non-reference into its corresponding string, number or null JSON value,
|
| + which is an extension to RFC4627. Likewise, "decode" will accept those
|
| + JSON values instead of croaking.
|
| +
|
| + If $enable is false, then the "encode" method will croak if it isn't
|
| + passed an arrayref or hashref, as JSON texts must either be an object or
|
| + array. Likewise, "decode" will croak if given something that is not a
|
| + JSON object or array.
|
| +
|
| + JSON->new->allow_nonref->encode ("Hello, World!")
|
| + => "Hello, World!"
|
| +
|
| + allow_unknown
|
| + $json = $json->allow_unknown ([$enable])
|
| +
|
| + $enabled = $json->get_allow_unknown
|
| +
|
| + If $enable is true (or missing), then "encode" will *not* throw an
|
| + exception when it encounters values it cannot represent in JSON (for
|
| + example, filehandles) but instead will encode a JSON "null" value. Note
|
| + that blessed objects are not included here and are handled separately by
|
| + c<allow_nonref>.
|
| +
|
| + If $enable is false (the default), then "encode" will throw an exception
|
| + when it encounters anything it cannot encode as JSON.
|
| +
|
| + This option does not affect "decode" in any way, and it is recommended
|
| + to leave it off unless you know your communications partner.
|
| +
|
| + allow_blessed
|
| + $json = $json->allow_blessed([$enable])
|
| +
|
| + $enabled = $json->get_allow_blessed
|
| +
|
| + If $enable is true (or missing), then the "encode" method will not barf
|
| + when it encounters a blessed reference. Instead, the value of the
|
| + convert_blessed option will decide whether "null" ("convert_blessed"
|
| + disabled or no "TO_JSON" method found) or a representation of the object
|
| + ("convert_blessed" enabled and "TO_JSON" method found) is being encoded.
|
| + Has no effect on "decode".
|
| +
|
| + If $enable is false (the default), then "encode" will throw an exception
|
| + when it encounters a blessed object.
|
| +
|
| + convert_blessed
|
| + $json = $json->convert_blessed([$enable])
|
| +
|
| + $enabled = $json->get_convert_blessed
|
| +
|
| + If $enable is true (or missing), then "encode", upon encountering a
|
| + blessed object, will check for the availability of the "TO_JSON" method
|
| + on the object's class. If found, it will be called in scalar context and
|
| + the resulting scalar will be encoded instead of the object. If no
|
| + "TO_JSON" method is found, the value of "allow_blessed" will decide what
|
| + to do.
|
| +
|
| + The "TO_JSON" method may safely call die if it wants. If "TO_JSON"
|
| + returns other blessed objects, those will be handled in the same way.
|
| + "TO_JSON" must take care of not causing an endless recursion cycle (==
|
| + crash) in this case. The name of "TO_JSON" was chosen because other
|
| + methods called by the Perl core (== not by the user of the object) are
|
| + usually in upper case letters and to avoid collisions with the "to_json"
|
| + function or method.
|
| +
|
| + This setting does not yet influence "decode" in any way.
|
| +
|
| + If $enable is false, then the "allow_blessed" setting will decide what
|
| + to do when a blessed object is found.
|
| +
|
| + convert_blessed_universally mode
|
| + If use "JSON" with "-convert_blessed_universally", the
|
| + "UNIVERSAL::TO_JSON" subroutine is defined as the below code:
|
| +
|
| + *UNIVERSAL::TO_JSON = sub {
|
| + my $b_obj = B::svref_2object( $_[0] );
|
| + return $b_obj->isa('B::HV') ? { %{ $_[0] } }
|
| + : $b_obj->isa('B::AV') ? [ @{ $_[0] } ]
|
| + : undef
|
| + ;
|
| + }
|
| +
|
| + This will cause that "encode" method converts simple blessed objects
|
| + into JSON objects as non-blessed object.
|
| +
|
| + JSON -convert_blessed_universally;
|
| + $json->allow_blessed->convert_blessed->encode( $blessed_object )
|
| +
|
| + This feature is experimental and may be removed in the future.
|
| +
|
| + filter_json_object
|
| + $json = $json->filter_json_object([$coderef])
|
| +
|
| + When $coderef is specified, it will be called from "decode" each time it
|
| + decodes a JSON object. The only argument passed to the coderef is a
|
| + reference to the newly-created hash. If the code references returns a
|
| + single scalar (which need not be a reference), this value (i.e. a copy
|
| + of that scalar to avoid aliasing) is inserted into the deserialised data
|
| + structure. If it returns an empty list (NOTE: *not* "undef", which is a
|
| + valid scalar), the original deserialised hash will be inserted. This
|
| + setting can slow down decoding considerably.
|
| +
|
| + When $coderef is omitted or undefined, any existing callback will be
|
| + removed and "decode" will not change the deserialised hash in any way.
|
| +
|
| + Example, convert all JSON objects into the integer 5:
|
| +
|
| + my $js = JSON->new->filter_json_object (sub { 5 });
|
| + # returns [5]
|
| + $js->decode ('[{}]'); # the given subroutine takes a hash reference.
|
| + # throw an exception because allow_nonref is not enabled
|
| + # so a lone 5 is not allowed.
|
| + $js->decode ('{"a":1, "b":2}');
|
| +
|
| + filter_json_single_key_object
|
| + $json = $json->filter_json_single_key_object($key [=> $coderef])
|
| +
|
| + Works remotely similar to "filter_json_object", but is only called for
|
| + JSON objects having a single key named $key.
|
| +
|
| + This $coderef is called before the one specified via
|
| + "filter_json_object", if any. It gets passed the single value in the
|
| + JSON object. If it returns a single value, it will be inserted into the
|
| + data structure. If it returns nothing (not even "undef" but the empty
|
| + list), the callback from "filter_json_object" will be called next, as if
|
| + no single-key callback were specified.
|
| +
|
| + If $coderef is omitted or undefined, the corresponding callback will be
|
| + disabled. There can only ever be one callback for a given key.
|
| +
|
| + As this callback gets called less often then the "filter_json_object"
|
| + one, decoding speed will not usually suffer as much. Therefore,
|
| + single-key objects make excellent targets to serialise Perl objects
|
| + into, especially as single-key JSON objects are as close to the
|
| + type-tagged value concept as JSON gets (it's basically an ID/VALUE
|
| + tuple). Of course, JSON does not support this in any way, so you need to
|
| + make sure your data never looks like a serialised Perl hash.
|
| +
|
| + Typical names for the single object key are "__class_whatever__", or
|
| + "$__dollars_are_rarely_used__$" or "}ugly_brace_placement", or even
|
| + things like "__class_md5sum(classname)__", to reduce the risk of
|
| + clashing with real hashes.
|
| +
|
| + Example, decode JSON objects of the form "{ "__widget__" => <id> }" into
|
| + the corresponding $WIDGET{<id>} object:
|
| +
|
| + # return whatever is in $WIDGET{5}:
|
| + JSON
|
| + ->new
|
| + ->filter_json_single_key_object (__widget__ => sub {
|
| + $WIDGET{ $_[0] }
|
| + })
|
| + ->decode ('{"__widget__": 5')
|
| +
|
| + # this can be used with a TO_JSON method in some "widget" class
|
| + # for serialisation to json:
|
| + sub WidgetBase::TO_JSON {
|
| + my ($self) = @_;
|
| +
|
| + unless ($self->{id}) {
|
| + $self->{id} = ..get..some..id..;
|
| + $WIDGET{$self->{id}} = $self;
|
| + }
|
| +
|
| + { __widget__ => $self->{id} }
|
| + }
|
| +
|
| + shrink
|
| + $json = $json->shrink([$enable])
|
| +
|
| + $enabled = $json->get_shrink
|
| +
|
| + With JSON::XS, this flag resizes strings generated by either "encode" or
|
| + "decode" to their minimum size possible. This can save memory when your
|
| + JSON texts are either very very long or you have many short strings. It
|
| + will also try to downgrade any strings to octet-form if possible: perl
|
| + stores strings internally either in an encoding called UTF-X or in
|
| + octet-form. The latter cannot store everything but uses less space in
|
| + general (and some buggy Perl or C code might even rely on that internal
|
| + representation being used).
|
| +
|
| + With JSON::PP, it is noop about resizing strings but tries
|
| + "utf8::downgrade" to the returned string by "encode". See to utf8.
|
| +
|
| + See to "OBJECT-ORIENTED INTERFACE" in JSON::XS and "METHODS" in
|
| + JSON::PP.
|
| +
|
| + max_depth
|
| + $json = $json->max_depth([$maximum_nesting_depth])
|
| +
|
| + $max_depth = $json->get_max_depth
|
| +
|
| + Sets the maximum nesting level (default 512) accepted while encoding or
|
| + decoding. If a higher nesting level is detected in JSON text or a Perl
|
| + data structure, then the encoder and decoder will stop and croak at that
|
| + point.
|
| +
|
| + Nesting level is defined by number of hash- or arrayrefs that the
|
| + encoder needs to traverse to reach a given point or the number of "{" or
|
| + "[" characters without their matching closing parenthesis crossed to
|
| + reach a given character in a string.
|
| +
|
| + If no argument is given, the highest possible setting will be used,
|
| + which is rarely useful.
|
| +
|
| + Note that nesting is implemented by recursion in C. The default value
|
| + has been chosen to be as large as typical operating systems allow
|
| + without crashing. (JSON::XS)
|
| +
|
| + With JSON::PP as the backend, when a large value (100 or more) was set
|
| + and it de/encodes a deep nested object/text, it may raise a warning
|
| + 'Deep recursion on subroutine' at the perl runtime phase.
|
| +
|
| + See "SECURITY CONSIDERATIONS" in JSON::XS for more info on why this is
|
| + useful.
|
| +
|
| + max_size
|
| + $json = $json->max_size([$maximum_string_size])
|
| +
|
| + $max_size = $json->get_max_size
|
| +
|
| + Set the maximum length a JSON text may have (in bytes) where decoding is
|
| + being attempted. The default is 0, meaning no limit. When "decode" is
|
| + called on a string that is longer then this many bytes, it will not
|
| + attempt to decode the string but throw an exception. This setting has no
|
| + effect on "encode" (yet).
|
| +
|
| + If no argument is given, the limit check will be deactivated (same as
|
| + when 0 is specified).
|
| +
|
| + See "SECURITY CONSIDERATIONS" in JSON::XS, below, for more info on why
|
| + this is useful.
|
| +
|
| + encode
|
| + $json_text = $json->encode($perl_scalar)
|
| +
|
| + Converts the given Perl data structure (a simple scalar or a reference
|
| + to a hash or array) to its JSON representation. Simple scalars will be
|
| + converted into JSON string or number sequences, while references to
|
| + arrays become JSON arrays and references to hashes become JSON objects.
|
| + Undefined Perl values (e.g. "undef") become JSON "null" values.
|
| + References to the integers 0 and 1 are converted into "true" and
|
| + "false".
|
| +
|
| + decode
|
| + $perl_scalar = $json->decode($json_text)
|
| +
|
| + The opposite of "encode": expects a JSON text and tries to parse it,
|
| + returning the resulting simple scalar or reference. Croaks on error.
|
| +
|
| + JSON numbers and strings become simple Perl scalars. JSON arrays become
|
| + Perl arrayrefs and JSON objects become Perl hashrefs. "true" becomes 1
|
| + ("JSON::true"), "false" becomes 0 ("JSON::false") and "null" becomes
|
| + "undef".
|
| +
|
| + decode_prefix
|
| + ($perl_scalar, $characters) = $json->decode_prefix($json_text)
|
| +
|
| + This works like the "decode" method, but instead of raising an exception
|
| + when there is trailing garbage after the first JSON object, it will
|
| + silently stop parsing there and return the number of characters consumed
|
| + so far.
|
| +
|
| + JSON->new->decode_prefix ("[1] the tail")
|
| + => ([], 3)
|
| +
|
| + See to "OBJECT-ORIENTED INTERFACE" in JSON::XS
|
| +
|
| + property
|
| + $boolean = $json->property($property_name)
|
| +
|
| + Returns a boolean value about above some properties.
|
| +
|
| + The available properties are "ascii", "latin1", "utf8",
|
| + "indent","space_before", "space_after", "relaxed", "canonical",
|
| + "allow_nonref", "allow_unknown", "allow_blessed", "convert_blessed",
|
| + "shrink", "max_depth" and "max_size".
|
| +
|
| + $boolean = $json->property('utf8');
|
| + => 0
|
| + $json->utf8;
|
| + $boolean = $json->property('utf8');
|
| + => 1
|
| +
|
| + Sets the property with a given boolean value.
|
| +
|
| + $json = $json->property($property_name => $boolean);
|
| +
|
| + With no argument, it returns all the above properties as a hash
|
| + reference.
|
| +
|
| + $flag_hashref = $json->property();
|
| +
|
| +INCREMENTAL PARSING
|
| + Most of this section are copied and modified from "INCREMENTAL PARSING"
|
| + in JSON::XS.
|
| +
|
| + In some cases, there is the need for incremental parsing of JSON texts.
|
| + This module does allow you to parse a JSON stream incrementally. It does
|
| + so by accumulating text until it has a full JSON object, which it then
|
| + can decode. This process is similar to using "decode_prefix" to see if a
|
| + full JSON object is available, but is much more efficient (and can be
|
| + implemented with a minimum of method calls).
|
| +
|
| + The backend module will only attempt to parse the JSON text once it is
|
| + sure it has enough text to get a decisive result, using a very simple
|
| + but truly incremental parser. This means that it sometimes won't stop as
|
| + early as the full parser, for example, it doesn't detect parenthesis
|
| + mismatches. The only thing it guarantees is that it starts decoding as
|
| + soon as a syntactically valid JSON text has been seen. This means you
|
| + need to set resource limits (e.g. "max_size") to ensure the parser will
|
| + stop parsing in the presence if syntax errors.
|
| +
|
| + The following methods implement this incremental parser.
|
| +
|
| + incr_parse
|
| + $json->incr_parse( [$string] ) # void context
|
| +
|
| + $obj_or_undef = $json->incr_parse( [$string] ) # scalar context
|
| +
|
| + @obj_or_empty = $json->incr_parse( [$string] ) # list context
|
| +
|
| + This is the central parsing function. It can both append new text and
|
| + extract objects from the stream accumulated so far (both of these
|
| + functions are optional).
|
| +
|
| + If $string is given, then this string is appended to the already
|
| + existing JSON fragment stored in the $json object.
|
| +
|
| + After that, if the function is called in void context, it will simply
|
| + return without doing anything further. This can be used to add more text
|
| + in as many chunks as you want.
|
| +
|
| + If the method is called in scalar context, then it will try to extract
|
| + exactly *one* JSON object. If that is successful, it will return this
|
| + object, otherwise it will return "undef". If there is a parse error,
|
| + this method will croak just as "decode" would do (one can then use
|
| + "incr_skip" to skip the erroneous part). This is the most common way of
|
| + using the method.
|
| +
|
| + And finally, in list context, it will try to extract as many objects
|
| + from the stream as it can find and return them, or the empty list
|
| + otherwise. For this to work, there must be no separators between the
|
| + JSON objects or arrays, instead they must be concatenated back-to-back.
|
| + If an error occurs, an exception will be raised as in the scalar context
|
| + case. Note that in this case, any previously-parsed JSON texts will be
|
| + lost.
|
| +
|
| + Example: Parse some JSON arrays/objects in a given string and return
|
| + them.
|
| +
|
| + my @objs = JSON->new->incr_parse ("[5][7][1,2]");
|
| +
|
| + incr_text
|
| + $lvalue_string = $json->incr_text
|
| +
|
| + This method returns the currently stored JSON fragment as an lvalue,
|
| + that is, you can manipulate it. This *only* works when a preceding call
|
| + to "incr_parse" in *scalar context* successfully returned an object.
|
| + Under all other circumstances you must not call this function (I mean
|
| + it. although in simple tests it might actually work, it *will* fail
|
| + under real world conditions). As a special exception, you can also call
|
| + this method before having parsed anything.
|
| +
|
| + This function is useful in two cases: a) finding the trailing text after
|
| + a JSON object or b) parsing multiple JSON objects separated by non-JSON
|
| + text (such as commas).
|
| +
|
| + $json->incr_text =~ s/\s*,\s*//;
|
| +
|
| + In Perl 5.005, "lvalue" attribute is not available. You must write codes
|
| + like the below:
|
| +
|
| + $string = $json->incr_text;
|
| + $string =~ s/\s*,\s*//;
|
| + $json->incr_text( $string );
|
| +
|
| + incr_skip
|
| + $json->incr_skip
|
| +
|
| + This will reset the state of the incremental parser and will remove the
|
| + parsed text from the input buffer. This is useful after "incr_parse"
|
| + died, in which case the input buffer and incremental parser state is
|
| + left unchanged, to skip the text parsed so far and to reset the parse
|
| + state.
|
| +
|
| + incr_reset
|
| + $json->incr_reset
|
| +
|
| + This completely resets the incremental parser, that is, after this call,
|
| + it will be as if the parser had never parsed anything.
|
| +
|
| + This is useful if you want to repeatedly parse JSON objects and want to
|
| + ignore any trailing data, which means you have to reset the parser after
|
| + each successful decode.
|
| +
|
| + See to "INCREMENTAL PARSING" in JSON::XS for examples.
|
| +
|
| +JSON::PP SUPPORT METHODS
|
| + The below methods are JSON::PP own methods, so when "JSON" works with
|
| + JSON::PP (i.e. the created object is a JSON::PP object), available. See
|
| + to "JSON::PP OWN METHODS" in JSON::PP in detail.
|
| +
|
| + If you use "JSON" with additional "-support_by_pp", some methods are
|
| + available even with JSON::XS. See to "USE PP FEATURES EVEN THOUGH XS
|
| + BACKEND".
|
| +
|
| + BEING { $ENV{PERL_JSON_BACKEND} = 'JSON::XS' }
|
| +
|
| + use JSON -support_by_pp;
|
| +
|
| + my $json = JSON->new;
|
| + $json->allow_nonref->escape_slash->encode("/");
|
| +
|
| + # functional interfaces too.
|
| + print to_json(["/"], {escape_slash => 1});
|
| + print from_json('["foo"]', {utf8 => 1});
|
| +
|
| + If you do not want to all functions but "-support_by_pp", use
|
| + "-no_export".
|
| +
|
| + use JSON -support_by_pp, -no_export;
|
| + # functional interfaces are not exported.
|
| +
|
| + allow_singlequote
|
| + $json = $json->allow_singlequote([$enable])
|
| +
|
| + If $enable is true (or missing), then "decode" will accept any JSON
|
| + strings quoted by single quotations that are invalid JSON format.
|
| +
|
| + $json->allow_singlequote->decode({"foo":'bar'});
|
| + $json->allow_singlequote->decode({'foo':"bar"});
|
| + $json->allow_singlequote->decode({'foo':'bar'});
|
| +
|
| + As same as the "relaxed" option, this option may be used to parse
|
| + application-specific files written by humans.
|
| +
|
| + allow_barekey
|
| + $json = $json->allow_barekey([$enable])
|
| +
|
| + If $enable is true (or missing), then "decode" will accept bare keys of
|
| + JSON object that are invalid JSON format.
|
| +
|
| + As same as the "relaxed" option, this option may be used to parse
|
| + application-specific files written by humans.
|
| +
|
| + $json->allow_barekey->decode('{foo:"bar"}');
|
| +
|
| + allow_bignum
|
| + $json = $json->allow_bignum([$enable])
|
| +
|
| + If $enable is true (or missing), then "decode" will convert the big
|
| + integer Perl cannot handle as integer into a Math::BigInt object and
|
| + convert a floating number (any) into a Math::BigFloat.
|
| +
|
| + On the contrary, "encode" converts "Math::BigInt" objects and
|
| + "Math::BigFloat" objects into JSON numbers with "allow_blessed" enable.
|
| +
|
| + $json->allow_nonref->allow_blessed->allow_bignum;
|
| + $bigfloat = $json->decode('2.000000000000000000000000001');
|
| + print $json->encode($bigfloat);
|
| + # => 2.000000000000000000000000001
|
| +
|
| + See to MAPPING about the conversion of JSON number.
|
| +
|
| + loose
|
| + $json = $json->loose([$enable])
|
| +
|
| + The unescaped [\x00-\x1f\x22\x2f\x5c] strings are invalid in JSON
|
| + strings and the module doesn't allow to "decode" to these (except for
|
| + \x2f). If $enable is true (or missing), then "decode" will accept these
|
| + unescaped strings.
|
| +
|
| + $json->loose->decode(qq|["abc
|
| + def"]|);
|
| +
|
| + See to "JSON::PP OWN METHODS" in JSON::PP.
|
| +
|
| + escape_slash
|
| + $json = $json->escape_slash([$enable])
|
| +
|
| + According to JSON Grammar, *slash* (U+002F) is escaped. But by default
|
| + JSON backend modules encode strings without escaping slash.
|
| +
|
| + If $enable is true (or missing), then "encode" will escape slashes.
|
| +
|
| + indent_length
|
| + $json = $json->indent_length($length)
|
| +
|
| + With JSON::XS, The indent space length is 3 and cannot be changed. With
|
| + JSON::PP, it sets the indent space length with the given $length. The
|
| + default is 3. The acceptable range is 0 to 15.
|
| +
|
| + sort_by
|
| + $json = $json->sort_by($function_name)
|
| + $json = $json->sort_by($subroutine_ref)
|
| +
|
| + If $function_name or $subroutine_ref are set, its sort routine are used.
|
| +
|
| + $js = $pc->sort_by(sub { $JSON::PP::a cmp $JSON::PP::b })->encode($obj);
|
| + # is($js, q|{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6,"g":7,"h":8,"i":9}|);
|
| +
|
| + $js = $pc->sort_by('own_sort')->encode($obj);
|
| + # is($js, q|{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6,"g":7,"h":8,"i":9}|);
|
| +
|
| + sub JSON::PP::own_sort { $JSON::PP::a cmp $JSON::PP::b }
|
| +
|
| + As the sorting routine runs in the JSON::PP scope, the given subroutine
|
| + name and the special variables $a, $b will begin with 'JSON::PP::'.
|
| +
|
| + If $integer is set, then the effect is same as "canonical" on.
|
| +
|
| + See to "JSON::PP OWN METHODS" in JSON::PP.
|
| +
|
| +MAPPING
|
| + This section is copied from JSON::XS and modified to "JSON". JSON::XS
|
| + and JSON::PP mapping mechanisms are almost equivalent.
|
| +
|
| + See to "MAPPING" in JSON::XS.
|
| +
|
| + JSON -> PERL
|
| + object
|
| + A JSON object becomes a reference to a hash in Perl. No ordering of
|
| + object keys is preserved (JSON does not preserver object key
|
| + ordering itself).
|
| +
|
| + array
|
| + A JSON array becomes a reference to an array in Perl.
|
| +
|
| + string
|
| + A JSON string becomes a string scalar in Perl - Unicode codepoints
|
| + in JSON are represented by the same codepoints in the Perl string,
|
| + so no manual decoding is necessary.
|
| +
|
| + number
|
| + A JSON number becomes either an integer, numeric (floating point) or
|
| + string scalar in perl, depending on its range and any fractional
|
| + parts. On the Perl level, there is no difference between those as
|
| + Perl handles all the conversion details, but an integer may take
|
| + slightly less memory and might represent more values exactly than
|
| + floating point numbers.
|
| +
|
| + If the number consists of digits only, "JSON" will try to represent
|
| + it as an integer value. If that fails, it will try to represent it
|
| + as a numeric (floating point) value if that is possible without loss
|
| + of precision. Otherwise it will preserve the number as a string
|
| + value (in which case you lose roundtripping ability, as the JSON
|
| + number will be re-encoded to a JSON string).
|
| +
|
| + Numbers containing a fractional or exponential part will always be
|
| + represented as numeric (floating point) values, possibly at a loss
|
| + of precision (in which case you might lose perfect roundtripping
|
| + ability, but the JSON number will still be re-encoded as a JSON
|
| + number).
|
| +
|
| + Note that precision is not accuracy - binary floating point values
|
| + cannot represent most decimal fractions exactly, and when converting
|
| + from and to floating point, "JSON" only guarantees precision up to
|
| + but not including the least significant bit.
|
| +
|
| + If the backend is JSON::PP and "allow_bignum" is enable, the big
|
| + integers and the numeric can be optionally converted into
|
| + Math::BigInt and Math::BigFloat objects.
|
| +
|
| + true, false
|
| + These JSON atoms become "JSON::true" and "JSON::false",
|
| + respectively. They are overloaded to act almost exactly like the
|
| + numbers 1 and 0. You can check whether a scalar is a JSON boolean by
|
| + using the "JSON::is_bool" function.
|
| +
|
| + If "JSON::true" and "JSON::false" are used as strings or compared as
|
| + strings, they represent as "true" and "false" respectively.
|
| +
|
| + print JSON::true . "\n";
|
| + => true
|
| + print JSON::true + 1;
|
| + => 1
|
| +
|
| + ok(JSON::true eq 'true');
|
| + ok(JSON::true eq '1');
|
| + ok(JSON::true == 1);
|
| +
|
| + "JSON" will install these missing overloading features to the
|
| + backend modules.
|
| +
|
| + null
|
| + A JSON null atom becomes "undef" in Perl.
|
| +
|
| + "JSON::null" returns "undef".
|
| +
|
| + PERL -> JSON
|
| + The mapping from Perl to JSON is slightly more difficult, as Perl is a
|
| + truly typeless language, so we can only guess which JSON type is meant
|
| + by a Perl value.
|
| +
|
| + hash references
|
| + Perl hash references become JSON objects. As there is no inherent
|
| + ordering in hash keys (or JSON objects), they will usually be
|
| + encoded in a pseudo-random order that can change between runs of the
|
| + same program but stays generally the same within a single run of a
|
| + program. "JSON" optionally sort the hash keys (determined by the
|
| + *canonical* flag), so the same data structure will serialise to the
|
| + same JSON text (given same settings and version of JSON::XS), but
|
| + this incurs a runtime overhead and is only rarely useful, e.g. when
|
| + you want to compare some JSON text against another for equality.
|
| +
|
| + In future, the ordered object feature will be added to JSON::PP
|
| + using "tie" mechanism.
|
| +
|
| + array references
|
| + Perl array references become JSON arrays.
|
| +
|
| + other references
|
| + Other unblessed references are generally not allowed and will cause
|
| + an exception to be thrown, except for references to the integers 0
|
| + and 1, which get turned into "false" and "true" atoms in JSON. You
|
| + can also use "JSON::false" and "JSON::true" to improve readability.
|
| +
|
| + to_json [\0,JSON::true] # yields [false,true]
|
| +
|
| + JSON::true, JSON::false, JSON::null
|
| + These special values become JSON true and JSON false values,
|
| + respectively. You can also use "\1" and "\0" directly if you want.
|
| +
|
| + JSON::null returns "undef".
|
| +
|
| + blessed objects
|
| + Blessed objects are not directly representable in JSON. See the
|
| + "allow_blessed" and "convert_blessed" methods on various options on
|
| + how to deal with this: basically, you can choose between throwing an
|
| + exception, encoding the reference as if it weren't blessed, or
|
| + provide your own serialiser method.
|
| +
|
| + With "convert_blessed_universally" mode, "encode" converts blessed
|
| + hash references or blessed array references (contains other blessed
|
| + references) into JSON members and arrays.
|
| +
|
| + use JSON -convert_blessed_universally;
|
| + JSON->new->allow_blessed->convert_blessed->encode( $blessed_object );
|
| +
|
| + See to convert_blessed.
|
| +
|
| + simple scalars
|
| + Simple Perl scalars (any scalar that is not a reference) are the
|
| + most difficult objects to encode: JSON::XS and JSON::PP will encode
|
| + undefined scalars as JSON "null" values, scalars that have last been
|
| + used in a string context before encoding as JSON strings, and
|
| + anything else as number value:
|
| +
|
| + # dump as number
|
| + encode_json [2] # yields [2]
|
| + encode_json [-3.0e17] # yields [-3e+17]
|
| + my $value = 5; encode_json [$value] # yields [5]
|
| +
|
| + # used as string, so dump as string
|
| + print $value;
|
| + encode_json [$value] # yields ["5"]
|
| +
|
| + # undef becomes null
|
| + encode_json [undef] # yields [null]
|
| +
|
| + You can force the type to be a string by stringifying it:
|
| +
|
| + my $x = 3.1; # some variable containing a number
|
| + "$x"; # stringified
|
| + $x .= ""; # another, more awkward way to stringify
|
| + print $x; # perl does it for you, too, quite often
|
| +
|
| + You can force the type to be a number by numifying it:
|
| +
|
| + my $x = "3"; # some variable containing a string
|
| + $x += 0; # numify it, ensuring it will be dumped as a number
|
| + $x *= 1; # same thing, the choice is yours.
|
| +
|
| + You can not currently force the type in other, less obscure, ways.
|
| +
|
| + Note that numerical precision has the same meaning as under Perl (so
|
| + binary to decimal conversion follows the same rules as in Perl,
|
| + which can differ to other languages). Also, your perl interpreter
|
| + might expose extensions to the floating point numbers of your
|
| + platform, such as infinities or NaN's - these cannot be represented
|
| + in JSON, and it is an error to pass those in.
|
| +
|
| + Big Number
|
| + If the backend is JSON::PP and "allow_bignum" is enable, "encode"
|
| + converts "Math::BigInt" objects and "Math::BigFloat" objects into
|
| + JSON numbers.
|
| +
|
| +JSON and ECMAscript
|
| + See to "JSON and ECMAscript" in JSON::XS.
|
| +
|
| +JSON and YAML
|
| + JSON is not a subset of YAML. See to "JSON and YAML" in JSON::XS.
|
| +
|
| +BACKEND MODULE DECISION
|
| + When you use "JSON", "JSON" tries to "use" JSON::XS. If this call
|
| + failed, it will "uses" JSON::PP. The required JSON::XS version is *2.2*
|
| + or later.
|
| +
|
| + The "JSON" constructor method returns an object inherited from the
|
| + backend module, and JSON::XS object is a blessed scalar reference while
|
| + JSON::PP is a blessed hash reference.
|
| +
|
| + So, your program should not depend on the backend module, especially
|
| + returned objects should not be modified.
|
| +
|
| + my $json = JSON->new; # XS or PP?
|
| + $json->{stash} = 'this is xs object'; # this code may raise an error!
|
| +
|
| + To check the backend module, there are some methods - "backend", "is_pp"
|
| + and "is_xs".
|
| +
|
| + JSON->backend; # 'JSON::XS' or 'JSON::PP'
|
| +
|
| + JSON->backend->is_pp: # 0 or 1
|
| +
|
| + JSON->backend->is_xs: # 1 or 0
|
| +
|
| + $json->is_xs; # 1 or 0
|
| +
|
| + $json->is_pp; # 0 or 1
|
| +
|
| + If you set an environment variable "PERL_JSON_BACKEND", the calling
|
| + action will be changed.
|
| +
|
| + PERL_JSON_BACKEND = 0 or PERL_JSON_BACKEND = 'JSON::PP'
|
| + Always use JSON::PP
|
| +
|
| + PERL_JSON_BACKEND == 1 or PERL_JSON_BACKEND = 'JSON::XS,JSON::PP'
|
| + (The default) Use compiled JSON::XS if it is properly compiled &
|
| + installed, otherwise use JSON::PP.
|
| +
|
| + PERL_JSON_BACKEND == 2 or PERL_JSON_BACKEND = 'JSON::XS'
|
| + Always use compiled JSON::XS, die if it isn't properly compiled &
|
| + installed.
|
| +
|
| + PERL_JSON_BACKEND = 'JSON::backportPP'
|
| + Always use JSON::backportPP. JSON::backportPP is JSON::PP back port
|
| + module. "JSON" includes JSON::backportPP instead of JSON::PP.
|
| +
|
| + These ideas come from DBI::PurePerl mechanism.
|
| +
|
| + example:
|
| +
|
| + BEGIN { $ENV{PERL_JSON_BACKEND} = 'JSON::PP' }
|
| + use JSON; # always uses JSON::PP
|
| +
|
| + In future, it may be able to specify another module.
|
| +
|
| +USE PP FEATURES EVEN THOUGH XS BACKEND
|
| + Many methods are available with either JSON::XS or JSON::PP and when the
|
| + backend module is JSON::XS, if any JSON::PP specific (i.e. JSON::XS
|
| + unsupported) method is called, it will "warn" and be noop.
|
| +
|
| + But If you "use" "JSON" passing the optional string "-support_by_pp", it
|
| + makes a part of those unsupported methods available. This feature is
|
| + achieved by using JSON::PP in "de/encode".
|
| +
|
| + BEGIN { $ENV{PERL_JSON_BACKEND} = 2 } # with JSON::XS
|
| + use JSON -support_by_pp;
|
| + my $json = JSON->new;
|
| + $json->allow_nonref->escape_slash->encode("/");
|
| +
|
| + At this time, the returned object is a "JSON::Backend::XS::Supportable"
|
| + object (re-blessed XS object), and by checking JSON::XS unsupported
|
| + flags in de/encoding, can support some unsupported methods - "loose",
|
| + "allow_bignum", "allow_barekey", "allow_singlequote", "escape_slash" and
|
| + "indent_length".
|
| +
|
| + When any unsupported methods are not enable, "XS de/encode" will be used
|
| + as is. The switch is achieved by changing the symbolic tables.
|
| +
|
| + "-support_by_pp" is effective only when the backend module is JSON::XS
|
| + and it makes the de/encoding speed down a bit.
|
| +
|
| + See to "JSON::PP SUPPORT METHODS".
|
| +
|
| +INCOMPATIBLE CHANGES TO OLD VERSION
|
| + There are big incompatibility between new version (2.00) and old (1.xx).
|
| + If you use old "JSON" 1.xx in your code, please check it.
|
| +
|
| + See to "Transition ways from 1.xx to 2.xx."
|
| +
|
| + jsonToObj and objToJson are obsoleted.
|
| + Non Perl-style name "jsonToObj" and "objToJson" are obsoleted (but
|
| + not yet deleted from the source). If you use these functions in your
|
| + code, please replace them with "from_json" and "to_json".
|
| +
|
| + Global variables are no longer available.
|
| + "JSON" class variables - $JSON::AUTOCONVERT, $JSON::BareKey, etc...
|
| + - are not available any longer. Instead, various features can be
|
| + used through object methods.
|
| +
|
| + Package JSON::Converter and JSON::Parser are deleted.
|
| + Now "JSON" bundles with JSON::PP which can handle JSON more properly
|
| + than them.
|
| +
|
| + Package JSON::NotString is deleted.
|
| + There was "JSON::NotString" class which represents JSON value
|
| + "true", "false", "null" and numbers. It was deleted and replaced by
|
| + "JSON::Boolean".
|
| +
|
| + "JSON::Boolean" represents "true" and "false".
|
| +
|
| + "JSON::Boolean" does not represent "null".
|
| +
|
| + "JSON::null" returns "undef".
|
| +
|
| + "JSON" makes JSON::XS::Boolean and JSON::PP::Boolean is-a relation
|
| + to JSON::Boolean.
|
| +
|
| + function JSON::Number is obsoleted.
|
| + "JSON::Number" is now needless because JSON::XS and JSON::PP have
|
| + round-trip integrity.
|
| +
|
| + JSONRPC modules are deleted.
|
| + Perl implementation of JSON-RPC protocol - "JSONRPC ",
|
| + "JSONRPC::Transport::HTTP" and "Apache::JSONRPC " are deleted in
|
| + this distribution. Instead of them, there is JSON::RPC which
|
| + supports JSON-RPC protocol version 1.1.
|
| +
|
| + Transition ways from 1.xx to 2.xx.
|
| + You should set "suport_by_pp" mode firstly, because it is always
|
| + successful for the below codes even with JSON::XS.
|
| +
|
| + use JSON -support_by_pp;
|
| +
|
| + Exported jsonToObj (simple)
|
| + from_json($json_text);
|
| +
|
| + Exported objToJson (simple)
|
| + to_json($perl_scalar);
|
| +
|
| + Exported jsonToObj (advanced)
|
| + $flags = {allow_barekey => 1, allow_singlequote => 1};
|
| + from_json($json_text, $flags);
|
| +
|
| + equivalent to:
|
| +
|
| + $JSON::BareKey = 1;
|
| + $JSON::QuotApos = 1;
|
| + jsonToObj($json_text);
|
| +
|
| + Exported objToJson (advanced)
|
| + $flags = {allow_blessed => 1, allow_barekey => 1};
|
| + to_json($perl_scalar, $flags);
|
| +
|
| + equivalent to:
|
| +
|
| + $JSON::BareKey = 1;
|
| + objToJson($perl_scalar);
|
| +
|
| + jsonToObj as object method
|
| + $json->decode($json_text);
|
| +
|
| + objToJson as object method
|
| + $json->encode($perl_scalar);
|
| +
|
| + new method with parameters
|
| + The "new" method in 2.x takes any parameters no longer. You can set
|
| + parameters instead;
|
| +
|
| + $json = JSON->new->pretty;
|
| +
|
| + $JSON::Pretty, $JSON::Indent, $JSON::Delimiter
|
| + If "indent" is enable, that means $JSON::Pretty flag set. And
|
| + $JSON::Delimiter was substituted by "space_before" and
|
| + "space_after". In conclusion:
|
| +
|
| + $json->indent->space_before->space_after;
|
| +
|
| + Equivalent to:
|
| +
|
| + $json->pretty;
|
| +
|
| + To change indent length, use "indent_length".
|
| +
|
| + (Only with JSON::PP, if "-support_by_pp" is not used.)
|
| +
|
| + $json->pretty->indent_length(2)->encode($perl_scalar);
|
| +
|
| + $JSON::BareKey
|
| + (Only with JSON::PP, if "-support_by_pp" is not used.)
|
| +
|
| + $json->allow_barekey->decode($json_text)
|
| +
|
| + $JSON::ConvBlessed
|
| + use "-convert_blessed_universally". See to convert_blessed.
|
| +
|
| + $JSON::QuotApos
|
| + (Only with JSON::PP, if "-support_by_pp" is not used.)
|
| +
|
| + $json->allow_singlequote->decode($json_text)
|
| +
|
| + $JSON::SingleQuote
|
| + Disable. "JSON" does not make such a invalid JSON string any longer.
|
| +
|
| + $JSON::KeySort
|
| + $json->canonical->encode($perl_scalar)
|
| +
|
| + This is the ascii sort.
|
| +
|
| + If you want to use with your own sort routine, check the "sort_by"
|
| + method.
|
| +
|
| + (Only with JSON::PP, even if "-support_by_pp" is used currently.)
|
| +
|
| + $json->sort_by($sort_routine_ref)->encode($perl_scalar)
|
| +
|
| + $json->sort_by(sub { $JSON::PP::a <=> $JSON::PP::b })->encode($perl_scalar)
|
| +
|
| + Can't access $a and $b but $JSON::PP::a and $JSON::PP::b.
|
| +
|
| + $JSON::SkipInvalid
|
| + $json->allow_unknown
|
| +
|
| + $JSON::AUTOCONVERT
|
| + Needless. "JSON" backend modules have the round-trip integrity.
|
| +
|
| + $JSON::UTF8
|
| + Needless because "JSON" (JSON::XS/JSON::PP) sets the UTF8 flag on
|
| + properly.
|
| +
|
| + # With UTF8-flagged strings
|
| +
|
| + $json->allow_nonref;
|
| + $str = chr(1000); # UTF8-flagged
|
| +
|
| + $json_text = $json->utf8(0)->encode($str);
|
| + utf8::is_utf8($json_text);
|
| + # true
|
| + $json_text = $json->utf8(1)->encode($str);
|
| + utf8::is_utf8($json_text);
|
| + # false
|
| +
|
| + $str = '"' . chr(1000) . '"'; # UTF8-flagged
|
| +
|
| + $perl_scalar = $json->utf8(0)->decode($str);
|
| + utf8::is_utf8($perl_scalar);
|
| + # true
|
| + $perl_scalar = $json->utf8(1)->decode($str);
|
| + # died because of 'Wide character in subroutine'
|
| +
|
| + See to "A FEW NOTES ON UNICODE AND PERL" in JSON::XS.
|
| +
|
| + $JSON::UnMapping
|
| + Disable. See to MAPPING.
|
| +
|
| + $JSON::SelfConvert
|
| + This option was deleted. Instead of it, if a given blessed object
|
| + has the "TO_JSON" method, "TO_JSON" will be executed with
|
| + "convert_blessed".
|
| +
|
| + $json->convert_blessed->encode($blessed_hashref_or_arrayref)
|
| + # if need, call allow_blessed
|
| +
|
| + Note that it was "toJson" in old version, but now not "toJson" but
|
| + "TO_JSON".
|
| +
|
| +TODO
|
| + example programs
|
| +
|
| +THREADS
|
| + No test with JSON::PP. If with JSON::XS, See to "THREADS" in JSON::XS.
|
| +
|
| +BUGS
|
| + Please report bugs relevant to "JSON" to <makamaka[at]cpan.org>.
|
| +
|
| +SEE ALSO
|
| + Most of the document is copied and modified from JSON::XS doc.
|
| +
|
| + JSON::XS, JSON::PP
|
| +
|
| + "RFC4627"(<http://www.ietf.org/rfc/rfc4627.txt>)
|
| +
|
| +AUTHOR
|
| + Makamaka Hannyaharamitu, <makamaka[at]cpan.org>
|
| +
|
| + JSON::XS was written by Marc Lehmann <schmorp[at]schmorp.de>
|
| +
|
| + The release of this new version owes to the courtesy of Marc Lehmann.
|
| +
|
| +COPYRIGHT AND LICENSE
|
| + Copyright 2005-2013 by Makamaka Hannyaharamitu
|
| +
|
| + This library is free software; you can redistribute it and/or modify it
|
| + under the same terms as Perl itself.
|
| +
|
|
|