OLD | NEW |
(Empty) | |
| 1 JSON version 2.58 |
| 2 ================= |
| 3 |
| 4 "JSON::PP" was earlier included in the "JSON" distribution, |
| 5 but has since Perl 5.14 been a core module. For this reason, |
| 6 "JSON::PP" was removed from the "JSON" distribution and can |
| 7 now be found also in the Perl5 repository at |
| 8 |
| 9 http://perl5.git.perl.org/perl.git |
| 10 |
| 11 (The newest "JSON::PP" version still exists in CPAN.) |
| 12 |
| 13 Instead, the "JSON" distribution will include "JSON::backportPP" |
| 14 for backwards computability. JSON.pm should thus work as it did before. |
| 15 |
| 16 ================= |
| 17 |
| 18 INSTALLATION |
| 19 |
| 20 To install this module type the following: |
| 21 |
| 22 perl Makefile.PL |
| 23 make |
| 24 make test |
| 25 make install |
| 26 |
| 27 if you use cpanm, can install JSON::XS at once. |
| 28 |
| 29 cpanm --with-recommends JSON |
| 30 |
| 31 |
| 32 NAME |
| 33 JSON - JSON (JavaScript Object Notation) encoder/decoder |
| 34 |
| 35 SYNOPSIS |
| 36 use JSON; # imports encode_json, decode_json, to_json and from_json. |
| 37 |
| 38 # simple and fast interfaces (expect/generate UTF-8) |
| 39 |
| 40 $utf8_encoded_json_text = encode_json $perl_hash_or_arrayref; |
| 41 $perl_hash_or_arrayref = decode_json $utf8_encoded_json_text; |
| 42 |
| 43 # OO-interface |
| 44 |
| 45 $json = JSON->new->allow_nonref; |
| 46 |
| 47 $json_text = $json->encode( $perl_scalar ); |
| 48 $perl_scalar = $json->decode( $json_text ); |
| 49 |
| 50 $pretty_printed = $json->pretty->encode( $perl_scalar ); # pretty-printing |
| 51 |
| 52 # If you want to use PP only support features, call with '-support_by_pp' |
| 53 # When XS unsupported feature is enable, using PP (de|en)code instead of XS
ones. |
| 54 |
| 55 use JSON -support_by_pp; |
| 56 |
| 57 # option-acceptable interfaces (expect/generate UNICODE by default) |
| 58 |
| 59 $json_text = to_json( $perl_scalar, { ascii => 1, pretty => 1 } ); |
| 60 $perl_scalar = from_json( $json_text, { utf8 => 1 } ); |
| 61 |
| 62 # Between (en|de)code_json and (to|from)_json, if you want to write |
| 63 # a code which communicates to an outer world (encoded in UTF-8), |
| 64 # recommend to use (en|de)code_json. |
| 65 |
| 66 VERSION |
| 67 2.58 |
| 68 |
| 69 This version is compatible with JSON::XS 2.27 and later. |
| 70 |
| 71 NOTE |
| 72 JSON::PP was earlier included in the "JSON" distribution, but has since |
| 73 Perl 5.14 been a core module. For this reason, JSON::PP was removed from |
| 74 the JSON distribution and can now be found also in the Perl5 repository |
| 75 at |
| 76 |
| 77 * <http://perl5.git.perl.org/perl.git> |
| 78 |
| 79 (The newest JSON::PP version still exists in CPAN.) |
| 80 |
| 81 Instead, the "JSON" distribution will include JSON::backportPP for |
| 82 backwards computability. JSON.pm should thus work as it did before. |
| 83 |
| 84 DESCRIPTION |
| 85 ************************** CAUTION ******************************** |
| 86 * This is 'JSON module version 2' and there are many differences * |
| 87 * to version 1.xx * |
| 88 * Please check your applications using old version. * |
| 89 * See to 'INCOMPATIBLE CHANGES TO OLD VERSION' * |
| 90 ******************************************************************* |
| 91 |
| 92 JSON (JavaScript Object Notation) is a simple data format. See to |
| 93 <http://www.json.org/> and |
| 94 "RFC4627"(<http://www.ietf.org/rfc/rfc4627.txt>). |
| 95 |
| 96 This module converts Perl data structures to JSON and vice versa using |
| 97 either JSON::XS or JSON::PP. |
| 98 |
| 99 JSON::XS is the fastest and most proper JSON module on CPAN which must |
| 100 be compiled and installed in your environment. JSON::PP is a pure-Perl |
| 101 module which is bundled in this distribution and has a strong |
| 102 compatibility to JSON::XS. |
| 103 |
| 104 This module try to use JSON::XS by default and fail to it, use JSON::PP |
| 105 instead. So its features completely depend on JSON::XS or JSON::PP. |
| 106 |
| 107 See to "BACKEND MODULE DECISION". |
| 108 |
| 109 To distinguish the module name 'JSON' and the format type JSON, the |
| 110 former is quoted by C<> (its results vary with your using media), and |
| 111 the latter is left just as it is. |
| 112 |
| 113 Module name : "JSON" |
| 114 |
| 115 Format type : JSON |
| 116 |
| 117 FEATURES |
| 118 * correct unicode handling |
| 119 |
| 120 This module (i.e. backend modules) knows how to handle Unicode, |
| 121 documents how and when it does so, and even documents what "correct" |
| 122 means. |
| 123 |
| 124 Even though there are limitations, this feature is available since |
| 125 Perl version 5.6. |
| 126 |
| 127 JSON::XS requires Perl 5.8.2 (but works correctly in 5.8.8 or |
| 128 later), so in older versions "JSON" should call JSON::PP as the |
| 129 backend which can be used since Perl 5.005. |
| 130 |
| 131 With Perl 5.8.x JSON::PP works, but from 5.8.0 to 5.8.2, because of |
| 132 a Perl side problem, JSON::PP works slower in the versions. And in |
| 133 5.005, the Unicode handling is not available. See to "UNICODE |
| 134 HANDLING ON PERLS" in JSON::PP for more information. |
| 135 |
| 136 See also to "A FEW NOTES ON UNICODE AND PERL" in JSON::XS and |
| 137 "ENCODING/CODESET_FLAG_NOTES" in JSON::XS. |
| 138 |
| 139 * round-trip integrity |
| 140 |
| 141 When you serialise a perl data structure using only data types |
| 142 supported by JSON and Perl, the deserialised data structure is |
| 143 identical on the Perl level. (e.g. the string "2.0" doesn't suddenly |
| 144 become "2" just because it looks like a number). There *are* minor |
| 145 exceptions to this, read the "MAPPING" section below to learn about |
| 146 those. |
| 147 |
| 148 * strict checking of JSON correctness |
| 149 |
| 150 There is no guessing, no generating of illegal JSON texts by |
| 151 default, and only JSON is accepted as input by default (the latter |
| 152 is a security feature). |
| 153 |
| 154 See to "FEATURES" in JSON::XS and "FEATURES" in JSON::PP. |
| 155 |
| 156 * fast |
| 157 |
| 158 This module returns a JSON::XS object itself if available. Compared |
| 159 to other JSON modules and other serialisers such as Storable, |
| 160 JSON::XS usually compares favorably in terms of speed, too. |
| 161 |
| 162 If not available, "JSON" returns a JSON::PP object instead of |
| 163 JSON::XS and it is very slow as pure-Perl. |
| 164 |
| 165 * simple to use |
| 166 |
| 167 This module has both a simple functional interface as well as an |
| 168 object oriented interface interface. |
| 169 |
| 170 * reasonably versatile output formats |
| 171 |
| 172 You can choose between the most compact guaranteed-single-line |
| 173 format possible (nice for simple line-based protocols), a pure-ASCII |
| 174 format (for when your transport is not 8-bit clean, still supports |
| 175 the whole Unicode range), or a pretty-printed format (for when you |
| 176 want to read that stuff). Or you can combine those features in |
| 177 whatever way you like. |
| 178 |
| 179 FUNCTIONAL INTERFACE |
| 180 Some documents are copied and modified from "FUNCTIONAL INTERFACE" in |
| 181 JSON::XS. "to_json" and "from_json" are additional functions. |
| 182 |
| 183 encode_json |
| 184 $json_text = encode_json $perl_scalar |
| 185 |
| 186 Converts the given Perl data structure to a UTF-8 encoded, binary |
| 187 string. |
| 188 |
| 189 This function call is functionally identical to: |
| 190 |
| 191 $json_text = JSON->new->utf8->encode($perl_scalar) |
| 192 |
| 193 decode_json |
| 194 $perl_scalar = decode_json $json_text |
| 195 |
| 196 The opposite of "encode_json": expects an UTF-8 (binary) string and |
| 197 tries to parse that as an UTF-8 encoded JSON text, returning the |
| 198 resulting reference. |
| 199 |
| 200 This function call is functionally identical to: |
| 201 |
| 202 $perl_scalar = JSON->new->utf8->decode($json_text) |
| 203 |
| 204 to_json |
| 205 $json_text = to_json($perl_scalar) |
| 206 |
| 207 Converts the given Perl data structure to a json string. |
| 208 |
| 209 This function call is functionally identical to: |
| 210 |
| 211 $json_text = JSON->new->encode($perl_scalar) |
| 212 |
| 213 Takes a hash reference as the second. |
| 214 |
| 215 $json_text = to_json($perl_scalar, $flag_hashref) |
| 216 |
| 217 So, |
| 218 |
| 219 $json_text = to_json($perl_scalar, {utf8 => 1, pretty => 1}) |
| 220 |
| 221 equivalent to: |
| 222 |
| 223 $json_text = JSON->new->utf8(1)->pretty(1)->encode($perl_scalar) |
| 224 |
| 225 If you want to write a modern perl code which communicates to outer |
| 226 world, you should use "encode_json" (supposed that JSON data are encoded |
| 227 in UTF-8). |
| 228 |
| 229 from_json |
| 230 $perl_scalar = from_json($json_text) |
| 231 |
| 232 The opposite of "to_json": expects a json string and tries to parse it, |
| 233 returning the resulting reference. |
| 234 |
| 235 This function call is functionally identical to: |
| 236 |
| 237 $perl_scalar = JSON->decode($json_text) |
| 238 |
| 239 Takes a hash reference as the second. |
| 240 |
| 241 $perl_scalar = from_json($json_text, $flag_hashref) |
| 242 |
| 243 So, |
| 244 |
| 245 $perl_scalar = from_json($json_text, {utf8 => 1}) |
| 246 |
| 247 equivalent to: |
| 248 |
| 249 $perl_scalar = JSON->new->utf8(1)->decode($json_text) |
| 250 |
| 251 If you want to write a modern perl code which communicates to outer |
| 252 world, you should use "decode_json" (supposed that JSON data are encoded |
| 253 in UTF-8). |
| 254 |
| 255 JSON::is_bool |
| 256 $is_boolean = JSON::is_bool($scalar) |
| 257 |
| 258 Returns true if the passed scalar represents either JSON::true or |
| 259 JSON::false, two constants that act like 1 and 0 respectively and are |
| 260 also used to represent JSON "true" and "false" in Perl strings. |
| 261 |
| 262 JSON::true |
| 263 Returns JSON true value which is blessed object. It "isa" JSON::Boolean |
| 264 object. |
| 265 |
| 266 JSON::false |
| 267 Returns JSON false value which is blessed object. It "isa" JSON::Boolean |
| 268 object. |
| 269 |
| 270 JSON::null |
| 271 Returns "undef". |
| 272 |
| 273 See MAPPING, below, for more information on how JSON values are mapped |
| 274 to Perl. |
| 275 |
| 276 HOW DO I DECODE A DATA FROM OUTER AND ENCODE TO OUTER |
| 277 This section supposes that your perl version is 5.8 or later. |
| 278 |
| 279 If you know a JSON text from an outer world - a network, a file content, |
| 280 and so on, is encoded in UTF-8, you should use "decode_json" or "JSON" |
| 281 module object with "utf8" enable. And the decoded result will contain |
| 282 UNICODE characters. |
| 283 |
| 284 # from network |
| 285 my $json = JSON->new->utf8; |
| 286 my $json_text = CGI->new->param( 'json_data' ); |
| 287 my $perl_scalar = $json->decode( $json_text ); |
| 288 |
| 289 # from file content |
| 290 local $/; |
| 291 open( my $fh, '<', 'json.data' ); |
| 292 $json_text = <$fh>; |
| 293 $perl_scalar = decode_json( $json_text ); |
| 294 |
| 295 If an outer data is not encoded in UTF-8, firstly you should "decode" |
| 296 it. |
| 297 |
| 298 use Encode; |
| 299 local $/; |
| 300 open( my $fh, '<', 'json.data' ); |
| 301 my $encoding = 'cp932'; |
| 302 my $unicode_json_text = decode( $encoding, <$fh> ); # UNICODE |
| 303 |
| 304 # or you can write the below code. |
| 305 # |
| 306 # open( my $fh, "<:encoding($encoding)", 'json.data' ); |
| 307 # $unicode_json_text = <$fh>; |
| 308 |
| 309 In this case, $unicode_json_text is of course UNICODE string. So you |
| 310 cannot use "decode_json" nor "JSON" module object with "utf8" enable. |
| 311 Instead of them, you use "JSON" module object with "utf8" disable or |
| 312 "from_json". |
| 313 |
| 314 $perl_scalar = $json->utf8(0)->decode( $unicode_json_text ); |
| 315 # or |
| 316 $perl_scalar = from_json( $unicode_json_text ); |
| 317 |
| 318 Or "encode 'utf8'" and "decode_json": |
| 319 |
| 320 $perl_scalar = decode_json( encode( 'utf8', $unicode_json_text ) ); |
| 321 # this way is not efficient. |
| 322 |
| 323 And now, you want to convert your $perl_scalar into JSON data and send |
| 324 it to an outer world - a network or a file content, and so on. |
| 325 |
| 326 Your data usually contains UNICODE strings and you want the converted |
| 327 data to be encoded in UTF-8, you should use "encode_json" or "JSON" |
| 328 module object with "utf8" enable. |
| 329 |
| 330 print encode_json( $perl_scalar ); # to a network? file? or display? |
| 331 # or |
| 332 print $json->utf8->encode( $perl_scalar ); |
| 333 |
| 334 If $perl_scalar does not contain UNICODE but $encoding-encoded strings |
| 335 for some reason, then its characters are regarded as latin1 for perl |
| 336 (because it does not concern with your $encoding). You cannot use |
| 337 "encode_json" nor "JSON" module object with "utf8" enable. Instead of |
| 338 them, you use "JSON" module object with "utf8" disable or "to_json". |
| 339 Note that the resulted text is a UNICODE string but no problem to print |
| 340 it. |
| 341 |
| 342 # $perl_scalar contains $encoding encoded string values |
| 343 $unicode_json_text = $json->utf8(0)->encode( $perl_scalar ); |
| 344 # or |
| 345 $unicode_json_text = to_json( $perl_scalar ); |
| 346 # $unicode_json_text consists of characters less than 0x100 |
| 347 print $unicode_json_text; |
| 348 |
| 349 Or "decode $encoding" all string values and "encode_json": |
| 350 |
| 351 $perl_scalar->{ foo } = decode( $encoding, $perl_scalar->{ foo } ); |
| 352 # ... do it to each string values, then encode_json |
| 353 $json_text = encode_json( $perl_scalar ); |
| 354 |
| 355 This method is a proper way but probably not efficient. |
| 356 |
| 357 See to Encode, perluniintro. |
| 358 |
| 359 COMMON OBJECT-ORIENTED INTERFACE |
| 360 new |
| 361 $json = JSON->new |
| 362 |
| 363 Returns a new "JSON" object inherited from either JSON::XS or JSON::PP |
| 364 that can be used to de/encode JSON strings. |
| 365 |
| 366 All boolean flags described below are by default *disabled*. |
| 367 |
| 368 The mutators for flags all return the JSON object again and thus calls |
| 369 can be chained: |
| 370 |
| 371 my $json = JSON->new->utf8->space_after->encode({a => [1,2]}) |
| 372 => {"a": [1, 2]} |
| 373 |
| 374 ascii |
| 375 $json = $json->ascii([$enable]) |
| 376 |
| 377 $enabled = $json->get_ascii |
| 378 |
| 379 If $enable is true (or missing), then the encode method will not |
| 380 generate characters outside the code range 0..127. Any Unicode |
| 381 characters outside that range will be escaped using either a single |
| 382 \uXXXX or a double \uHHHH\uLLLLL escape sequence, as per RFC4627. |
| 383 |
| 384 If $enable is false, then the encode method will not escape Unicode |
| 385 characters unless required by the JSON syntax or other flags. This |
| 386 results in a faster and more compact format. |
| 387 |
| 388 This feature depends on the used Perl version and environment. |
| 389 |
| 390 See to "UNICODE HANDLING ON PERLS" in JSON::PP if the backend is PP. |
| 391 |
| 392 JSON->new->ascii(1)->encode([chr 0x10401]) |
| 393 => ["\ud801\udc01"] |
| 394 |
| 395 latin1 |
| 396 $json = $json->latin1([$enable]) |
| 397 |
| 398 $enabled = $json->get_latin1 |
| 399 |
| 400 If $enable is true (or missing), then the encode method will encode the |
| 401 resulting JSON text as latin1 (or iso-8859-1), escaping any characters |
| 402 outside the code range 0..255. |
| 403 |
| 404 If $enable is false, then the encode method will not escape Unicode |
| 405 characters unless required by the JSON syntax or other flags. |
| 406 |
| 407 JSON->new->latin1->encode (["\x{89}\x{abc}"] |
| 408 => ["\x{89}\\u0abc"] # (perl syntax, U+abc escaped, U+89 not) |
| 409 |
| 410 utf8 |
| 411 $json = $json->utf8([$enable]) |
| 412 |
| 413 $enabled = $json->get_utf8 |
| 414 |
| 415 If $enable is true (or missing), then the encode method will encode the |
| 416 JSON result into UTF-8, as required by many protocols, while the decode |
| 417 method expects to be handled an UTF-8-encoded string. Please note that |
| 418 UTF-8-encoded strings do not contain any characters outside the range |
| 419 0..255, they are thus useful for bytewise/binary I/O. |
| 420 |
| 421 In future versions, enabling this option might enable autodetection of |
| 422 the UTF-16 and UTF-32 encoding families, as described in RFC4627. |
| 423 |
| 424 If $enable is false, then the encode method will return the JSON string |
| 425 as a (non-encoded) Unicode string, while decode expects thus a Unicode |
| 426 string. Any decoding or encoding (e.g. to UTF-8 or UTF-16) needs to be |
| 427 done yourself, e.g. using the Encode module. |
| 428 |
| 429 Example, output UTF-16BE-encoded JSON: |
| 430 |
| 431 use Encode; |
| 432 $jsontext = encode "UTF-16BE", JSON::XS->new->encode ($object); |
| 433 |
| 434 Example, decode UTF-32LE-encoded JSON: |
| 435 |
| 436 use Encode; |
| 437 $object = JSON::XS->new->decode (decode "UTF-32LE", $jsontext); |
| 438 |
| 439 See to "UNICODE HANDLING ON PERLS" in JSON::PP if the backend is PP. |
| 440 |
| 441 pretty |
| 442 $json = $json->pretty([$enable]) |
| 443 |
| 444 This enables (or disables) all of the "indent", "space_before" and |
| 445 "space_after" (and in the future possibly more) flags in one call to |
| 446 generate the most readable (or most compact) form possible. |
| 447 |
| 448 Equivalent to: |
| 449 |
| 450 $json->indent->space_before->space_after |
| 451 |
| 452 The indent space length is three and JSON::XS cannot change the indent |
| 453 space length. |
| 454 |
| 455 indent |
| 456 $json = $json->indent([$enable]) |
| 457 |
| 458 $enabled = $json->get_indent |
| 459 |
| 460 If $enable is true (or missing), then the "encode" method will use a |
| 461 multiline format as output, putting every array member or object/hash |
| 462 key-value pair into its own line, identifying them properly. |
| 463 |
| 464 If $enable is false, no newlines or indenting will be produced, and the |
| 465 resulting JSON text is guaranteed not to contain any "newlines". |
| 466 |
| 467 This setting has no effect when decoding JSON texts. |
| 468 |
| 469 The indent space length is three. With JSON::PP, you can also access |
| 470 "indent_length" to change indent space length. |
| 471 |
| 472 space_before |
| 473 $json = $json->space_before([$enable]) |
| 474 |
| 475 $enabled = $json->get_space_before |
| 476 |
| 477 If $enable is true (or missing), then the "encode" method will add an |
| 478 extra optional space before the ":" separating keys from values in JSON |
| 479 objects. |
| 480 |
| 481 If $enable is false, then the "encode" method will not add any extra |
| 482 space at those places. |
| 483 |
| 484 This setting has no effect when decoding JSON texts. |
| 485 |
| 486 Example, space_before enabled, space_after and indent disabled: |
| 487 |
| 488 {"key" :"value"} |
| 489 |
| 490 space_after |
| 491 $json = $json->space_after([$enable]) |
| 492 |
| 493 $enabled = $json->get_space_after |
| 494 |
| 495 If $enable is true (or missing), then the "encode" method will add an |
| 496 extra optional space after the ":" separating keys from values in JSON |
| 497 objects and extra whitespace after the "," separating key-value pairs |
| 498 and array members. |
| 499 |
| 500 If $enable is false, then the "encode" method will not add any extra |
| 501 space at those places. |
| 502 |
| 503 This setting has no effect when decoding JSON texts. |
| 504 |
| 505 Example, space_before and indent disabled, space_after enabled: |
| 506 |
| 507 {"key": "value"} |
| 508 |
| 509 relaxed |
| 510 $json = $json->relaxed([$enable]) |
| 511 |
| 512 $enabled = $json->get_relaxed |
| 513 |
| 514 If $enable is true (or missing), then "decode" will accept some |
| 515 extensions to normal JSON syntax (see below). "encode" will not be |
| 516 affected in anyway. *Be aware that this option makes you accept invalid |
| 517 JSON texts as if they were valid!*. I suggest only to use this option to |
| 518 parse application-specific files written by humans (configuration files, |
| 519 resource files etc.) |
| 520 |
| 521 If $enable is false (the default), then "decode" will only accept valid |
| 522 JSON texts. |
| 523 |
| 524 Currently accepted extensions are: |
| 525 |
| 526 * list items can have an end-comma |
| 527 |
| 528 JSON *separates* array elements and key-value pairs with commas. |
| 529 This can be annoying if you write JSON texts manually and want to be |
| 530 able to quickly append elements, so this extension accepts comma at |
| 531 the end of such items not just between them: |
| 532 |
| 533 [ |
| 534 1, |
| 535 2, <- this comma not normally allowed |
| 536 ] |
| 537 { |
| 538 "k1": "v1", |
| 539 "k2": "v2", <- this comma not normally allowed |
| 540 } |
| 541 |
| 542 * shell-style '#'-comments |
| 543 |
| 544 Whenever JSON allows whitespace, shell-style comments are |
| 545 additionally allowed. They are terminated by the first |
| 546 carriage-return or line-feed character, after which more white-space |
| 547 and comments are allowed. |
| 548 |
| 549 [ |
| 550 1, # this comment not allowed in JSON |
| 551 # neither this one... |
| 552 ] |
| 553 |
| 554 canonical |
| 555 $json = $json->canonical([$enable]) |
| 556 |
| 557 $enabled = $json->get_canonical |
| 558 |
| 559 If $enable is true (or missing), then the "encode" method will output |
| 560 JSON objects by sorting their keys. This is adding a comparatively high |
| 561 overhead. |
| 562 |
| 563 If $enable is false, then the "encode" method will output key-value |
| 564 pairs in the order Perl stores them (which will likely change between |
| 565 runs of the same script). |
| 566 |
| 567 This option is useful if you want the same data structure to be encoded |
| 568 as the same JSON text (given the same overall settings). If it is |
| 569 disabled, the same hash might be encoded differently even if contains |
| 570 the same data, as key-value pairs have no inherent ordering in Perl. |
| 571 |
| 572 This setting has no effect when decoding JSON texts. |
| 573 |
| 574 allow_nonref |
| 575 $json = $json->allow_nonref([$enable]) |
| 576 |
| 577 $enabled = $json->get_allow_nonref |
| 578 |
| 579 If $enable is true (or missing), then the "encode" method can convert a |
| 580 non-reference into its corresponding string, number or null JSON value, |
| 581 which is an extension to RFC4627. Likewise, "decode" will accept those |
| 582 JSON values instead of croaking. |
| 583 |
| 584 If $enable is false, then the "encode" method will croak if it isn't |
| 585 passed an arrayref or hashref, as JSON texts must either be an object or |
| 586 array. Likewise, "decode" will croak if given something that is not a |
| 587 JSON object or array. |
| 588 |
| 589 JSON->new->allow_nonref->encode ("Hello, World!") |
| 590 => "Hello, World!" |
| 591 |
| 592 allow_unknown |
| 593 $json = $json->allow_unknown ([$enable]) |
| 594 |
| 595 $enabled = $json->get_allow_unknown |
| 596 |
| 597 If $enable is true (or missing), then "encode" will *not* throw an |
| 598 exception when it encounters values it cannot represent in JSON (for |
| 599 example, filehandles) but instead will encode a JSON "null" value. Note |
| 600 that blessed objects are not included here and are handled separately by |
| 601 c<allow_nonref>. |
| 602 |
| 603 If $enable is false (the default), then "encode" will throw an exception |
| 604 when it encounters anything it cannot encode as JSON. |
| 605 |
| 606 This option does not affect "decode" in any way, and it is recommended |
| 607 to leave it off unless you know your communications partner. |
| 608 |
| 609 allow_blessed |
| 610 $json = $json->allow_blessed([$enable]) |
| 611 |
| 612 $enabled = $json->get_allow_blessed |
| 613 |
| 614 If $enable is true (or missing), then the "encode" method will not barf |
| 615 when it encounters a blessed reference. Instead, the value of the |
| 616 convert_blessed option will decide whether "null" ("convert_blessed" |
| 617 disabled or no "TO_JSON" method found) or a representation of the object |
| 618 ("convert_blessed" enabled and "TO_JSON" method found) is being encoded. |
| 619 Has no effect on "decode". |
| 620 |
| 621 If $enable is false (the default), then "encode" will throw an exception |
| 622 when it encounters a blessed object. |
| 623 |
| 624 convert_blessed |
| 625 $json = $json->convert_blessed([$enable]) |
| 626 |
| 627 $enabled = $json->get_convert_blessed |
| 628 |
| 629 If $enable is true (or missing), then "encode", upon encountering a |
| 630 blessed object, will check for the availability of the "TO_JSON" method |
| 631 on the object's class. If found, it will be called in scalar context and |
| 632 the resulting scalar will be encoded instead of the object. If no |
| 633 "TO_JSON" method is found, the value of "allow_blessed" will decide what |
| 634 to do. |
| 635 |
| 636 The "TO_JSON" method may safely call die if it wants. If "TO_JSON" |
| 637 returns other blessed objects, those will be handled in the same way. |
| 638 "TO_JSON" must take care of not causing an endless recursion cycle (== |
| 639 crash) in this case. The name of "TO_JSON" was chosen because other |
| 640 methods called by the Perl core (== not by the user of the object) are |
| 641 usually in upper case letters and to avoid collisions with the "to_json" |
| 642 function or method. |
| 643 |
| 644 This setting does not yet influence "decode" in any way. |
| 645 |
| 646 If $enable is false, then the "allow_blessed" setting will decide what |
| 647 to do when a blessed object is found. |
| 648 |
| 649 convert_blessed_universally mode |
| 650 If use "JSON" with "-convert_blessed_universally", the |
| 651 "UNIVERSAL::TO_JSON" subroutine is defined as the below code: |
| 652 |
| 653 *UNIVERSAL::TO_JSON = sub { |
| 654 my $b_obj = B::svref_2object( $_[0] ); |
| 655 return $b_obj->isa('B::HV') ? { %{ $_[0] } } |
| 656 : $b_obj->isa('B::AV') ? [ @{ $_[0] } ] |
| 657 : undef |
| 658 ; |
| 659 } |
| 660 |
| 661 This will cause that "encode" method converts simple blessed objects |
| 662 into JSON objects as non-blessed object. |
| 663 |
| 664 JSON -convert_blessed_universally; |
| 665 $json->allow_blessed->convert_blessed->encode( $blessed_object ) |
| 666 |
| 667 This feature is experimental and may be removed in the future. |
| 668 |
| 669 filter_json_object |
| 670 $json = $json->filter_json_object([$coderef]) |
| 671 |
| 672 When $coderef is specified, it will be called from "decode" each time it |
| 673 decodes a JSON object. The only argument passed to the coderef is a |
| 674 reference to the newly-created hash. If the code references returns a |
| 675 single scalar (which need not be a reference), this value (i.e. a copy |
| 676 of that scalar to avoid aliasing) is inserted into the deserialised data |
| 677 structure. If it returns an empty list (NOTE: *not* "undef", which is a |
| 678 valid scalar), the original deserialised hash will be inserted. This |
| 679 setting can slow down decoding considerably. |
| 680 |
| 681 When $coderef is omitted or undefined, any existing callback will be |
| 682 removed and "decode" will not change the deserialised hash in any way. |
| 683 |
| 684 Example, convert all JSON objects into the integer 5: |
| 685 |
| 686 my $js = JSON->new->filter_json_object (sub { 5 }); |
| 687 # returns [5] |
| 688 $js->decode ('[{}]'); # the given subroutine takes a hash reference. |
| 689 # throw an exception because allow_nonref is not enabled |
| 690 # so a lone 5 is not allowed. |
| 691 $js->decode ('{"a":1, "b":2}'); |
| 692 |
| 693 filter_json_single_key_object |
| 694 $json = $json->filter_json_single_key_object($key [=> $coderef]) |
| 695 |
| 696 Works remotely similar to "filter_json_object", but is only called for |
| 697 JSON objects having a single key named $key. |
| 698 |
| 699 This $coderef is called before the one specified via |
| 700 "filter_json_object", if any. It gets passed the single value in the |
| 701 JSON object. If it returns a single value, it will be inserted into the |
| 702 data structure. If it returns nothing (not even "undef" but the empty |
| 703 list), the callback from "filter_json_object" will be called next, as if |
| 704 no single-key callback were specified. |
| 705 |
| 706 If $coderef is omitted or undefined, the corresponding callback will be |
| 707 disabled. There can only ever be one callback for a given key. |
| 708 |
| 709 As this callback gets called less often then the "filter_json_object" |
| 710 one, decoding speed will not usually suffer as much. Therefore, |
| 711 single-key objects make excellent targets to serialise Perl objects |
| 712 into, especially as single-key JSON objects are as close to the |
| 713 type-tagged value concept as JSON gets (it's basically an ID/VALUE |
| 714 tuple). Of course, JSON does not support this in any way, so you need to |
| 715 make sure your data never looks like a serialised Perl hash. |
| 716 |
| 717 Typical names for the single object key are "__class_whatever__", or |
| 718 "$__dollars_are_rarely_used__$" or "}ugly_brace_placement", or even |
| 719 things like "__class_md5sum(classname)__", to reduce the risk of |
| 720 clashing with real hashes. |
| 721 |
| 722 Example, decode JSON objects of the form "{ "__widget__" => <id> }" into |
| 723 the corresponding $WIDGET{<id>} object: |
| 724 |
| 725 # return whatever is in $WIDGET{5}: |
| 726 JSON |
| 727 ->new |
| 728 ->filter_json_single_key_object (__widget__ => sub { |
| 729 $WIDGET{ $_[0] } |
| 730 }) |
| 731 ->decode ('{"__widget__": 5') |
| 732 |
| 733 # this can be used with a TO_JSON method in some "widget" class |
| 734 # for serialisation to json: |
| 735 sub WidgetBase::TO_JSON { |
| 736 my ($self) = @_; |
| 737 |
| 738 unless ($self->{id}) { |
| 739 $self->{id} = ..get..some..id..; |
| 740 $WIDGET{$self->{id}} = $self; |
| 741 } |
| 742 |
| 743 { __widget__ => $self->{id} } |
| 744 } |
| 745 |
| 746 shrink |
| 747 $json = $json->shrink([$enable]) |
| 748 |
| 749 $enabled = $json->get_shrink |
| 750 |
| 751 With JSON::XS, this flag resizes strings generated by either "encode" or |
| 752 "decode" to their minimum size possible. This can save memory when your |
| 753 JSON texts are either very very long or you have many short strings. It |
| 754 will also try to downgrade any strings to octet-form if possible: perl |
| 755 stores strings internally either in an encoding called UTF-X or in |
| 756 octet-form. The latter cannot store everything but uses less space in |
| 757 general (and some buggy Perl or C code might even rely on that internal |
| 758 representation being used). |
| 759 |
| 760 With JSON::PP, it is noop about resizing strings but tries |
| 761 "utf8::downgrade" to the returned string by "encode". See to utf8. |
| 762 |
| 763 See to "OBJECT-ORIENTED INTERFACE" in JSON::XS and "METHODS" in |
| 764 JSON::PP. |
| 765 |
| 766 max_depth |
| 767 $json = $json->max_depth([$maximum_nesting_depth]) |
| 768 |
| 769 $max_depth = $json->get_max_depth |
| 770 |
| 771 Sets the maximum nesting level (default 512) accepted while encoding or |
| 772 decoding. If a higher nesting level is detected in JSON text or a Perl |
| 773 data structure, then the encoder and decoder will stop and croak at that |
| 774 point. |
| 775 |
| 776 Nesting level is defined by number of hash- or arrayrefs that the |
| 777 encoder needs to traverse to reach a given point or the number of "{" or |
| 778 "[" characters without their matching closing parenthesis crossed to |
| 779 reach a given character in a string. |
| 780 |
| 781 If no argument is given, the highest possible setting will be used, |
| 782 which is rarely useful. |
| 783 |
| 784 Note that nesting is implemented by recursion in C. The default value |
| 785 has been chosen to be as large as typical operating systems allow |
| 786 without crashing. (JSON::XS) |
| 787 |
| 788 With JSON::PP as the backend, when a large value (100 or more) was set |
| 789 and it de/encodes a deep nested object/text, it may raise a warning |
| 790 'Deep recursion on subroutine' at the perl runtime phase. |
| 791 |
| 792 See "SECURITY CONSIDERATIONS" in JSON::XS for more info on why this is |
| 793 useful. |
| 794 |
| 795 max_size |
| 796 $json = $json->max_size([$maximum_string_size]) |
| 797 |
| 798 $max_size = $json->get_max_size |
| 799 |
| 800 Set the maximum length a JSON text may have (in bytes) where decoding is |
| 801 being attempted. The default is 0, meaning no limit. When "decode" is |
| 802 called on a string that is longer then this many bytes, it will not |
| 803 attempt to decode the string but throw an exception. This setting has no |
| 804 effect on "encode" (yet). |
| 805 |
| 806 If no argument is given, the limit check will be deactivated (same as |
| 807 when 0 is specified). |
| 808 |
| 809 See "SECURITY CONSIDERATIONS" in JSON::XS, below, for more info on why |
| 810 this is useful. |
| 811 |
| 812 encode |
| 813 $json_text = $json->encode($perl_scalar) |
| 814 |
| 815 Converts the given Perl data structure (a simple scalar or a reference |
| 816 to a hash or array) to its JSON representation. Simple scalars will be |
| 817 converted into JSON string or number sequences, while references to |
| 818 arrays become JSON arrays and references to hashes become JSON objects. |
| 819 Undefined Perl values (e.g. "undef") become JSON "null" values. |
| 820 References to the integers 0 and 1 are converted into "true" and |
| 821 "false". |
| 822 |
| 823 decode |
| 824 $perl_scalar = $json->decode($json_text) |
| 825 |
| 826 The opposite of "encode": expects a JSON text and tries to parse it, |
| 827 returning the resulting simple scalar or reference. Croaks on error. |
| 828 |
| 829 JSON numbers and strings become simple Perl scalars. JSON arrays become |
| 830 Perl arrayrefs and JSON objects become Perl hashrefs. "true" becomes 1 |
| 831 ("JSON::true"), "false" becomes 0 ("JSON::false") and "null" becomes |
| 832 "undef". |
| 833 |
| 834 decode_prefix |
| 835 ($perl_scalar, $characters) = $json->decode_prefix($json_text) |
| 836 |
| 837 This works like the "decode" method, but instead of raising an exception |
| 838 when there is trailing garbage after the first JSON object, it will |
| 839 silently stop parsing there and return the number of characters consumed |
| 840 so far. |
| 841 |
| 842 JSON->new->decode_prefix ("[1] the tail") |
| 843 => ([], 3) |
| 844 |
| 845 See to "OBJECT-ORIENTED INTERFACE" in JSON::XS |
| 846 |
| 847 property |
| 848 $boolean = $json->property($property_name) |
| 849 |
| 850 Returns a boolean value about above some properties. |
| 851 |
| 852 The available properties are "ascii", "latin1", "utf8", |
| 853 "indent","space_before", "space_after", "relaxed", "canonical", |
| 854 "allow_nonref", "allow_unknown", "allow_blessed", "convert_blessed", |
| 855 "shrink", "max_depth" and "max_size". |
| 856 |
| 857 $boolean = $json->property('utf8'); |
| 858 => 0 |
| 859 $json->utf8; |
| 860 $boolean = $json->property('utf8'); |
| 861 => 1 |
| 862 |
| 863 Sets the property with a given boolean value. |
| 864 |
| 865 $json = $json->property($property_name => $boolean); |
| 866 |
| 867 With no argument, it returns all the above properties as a hash |
| 868 reference. |
| 869 |
| 870 $flag_hashref = $json->property(); |
| 871 |
| 872 INCREMENTAL PARSING |
| 873 Most of this section are copied and modified from "INCREMENTAL PARSING" |
| 874 in JSON::XS. |
| 875 |
| 876 In some cases, there is the need for incremental parsing of JSON texts. |
| 877 This module does allow you to parse a JSON stream incrementally. It does |
| 878 so by accumulating text until it has a full JSON object, which it then |
| 879 can decode. This process is similar to using "decode_prefix" to see if a |
| 880 full JSON object is available, but is much more efficient (and can be |
| 881 implemented with a minimum of method calls). |
| 882 |
| 883 The backend module will only attempt to parse the JSON text once it is |
| 884 sure it has enough text to get a decisive result, using a very simple |
| 885 but truly incremental parser. This means that it sometimes won't stop as |
| 886 early as the full parser, for example, it doesn't detect parenthesis |
| 887 mismatches. The only thing it guarantees is that it starts decoding as |
| 888 soon as a syntactically valid JSON text has been seen. This means you |
| 889 need to set resource limits (e.g. "max_size") to ensure the parser will |
| 890 stop parsing in the presence if syntax errors. |
| 891 |
| 892 The following methods implement this incremental parser. |
| 893 |
| 894 incr_parse |
| 895 $json->incr_parse( [$string] ) # void context |
| 896 |
| 897 $obj_or_undef = $json->incr_parse( [$string] ) # scalar context |
| 898 |
| 899 @obj_or_empty = $json->incr_parse( [$string] ) # list context |
| 900 |
| 901 This is the central parsing function. It can both append new text and |
| 902 extract objects from the stream accumulated so far (both of these |
| 903 functions are optional). |
| 904 |
| 905 If $string is given, then this string is appended to the already |
| 906 existing JSON fragment stored in the $json object. |
| 907 |
| 908 After that, if the function is called in void context, it will simply |
| 909 return without doing anything further. This can be used to add more text |
| 910 in as many chunks as you want. |
| 911 |
| 912 If the method is called in scalar context, then it will try to extract |
| 913 exactly *one* JSON object. If that is successful, it will return this |
| 914 object, otherwise it will return "undef". If there is a parse error, |
| 915 this method will croak just as "decode" would do (one can then use |
| 916 "incr_skip" to skip the erroneous part). This is the most common way of |
| 917 using the method. |
| 918 |
| 919 And finally, in list context, it will try to extract as many objects |
| 920 from the stream as it can find and return them, or the empty list |
| 921 otherwise. For this to work, there must be no separators between the |
| 922 JSON objects or arrays, instead they must be concatenated back-to-back. |
| 923 If an error occurs, an exception will be raised as in the scalar context |
| 924 case. Note that in this case, any previously-parsed JSON texts will be |
| 925 lost. |
| 926 |
| 927 Example: Parse some JSON arrays/objects in a given string and return |
| 928 them. |
| 929 |
| 930 my @objs = JSON->new->incr_parse ("[5][7][1,2]"); |
| 931 |
| 932 incr_text |
| 933 $lvalue_string = $json->incr_text |
| 934 |
| 935 This method returns the currently stored JSON fragment as an lvalue, |
| 936 that is, you can manipulate it. This *only* works when a preceding call |
| 937 to "incr_parse" in *scalar context* successfully returned an object. |
| 938 Under all other circumstances you must not call this function (I mean |
| 939 it. although in simple tests it might actually work, it *will* fail |
| 940 under real world conditions). As a special exception, you can also call |
| 941 this method before having parsed anything. |
| 942 |
| 943 This function is useful in two cases: a) finding the trailing text after |
| 944 a JSON object or b) parsing multiple JSON objects separated by non-JSON |
| 945 text (such as commas). |
| 946 |
| 947 $json->incr_text =~ s/\s*,\s*//; |
| 948 |
| 949 In Perl 5.005, "lvalue" attribute is not available. You must write codes |
| 950 like the below: |
| 951 |
| 952 $string = $json->incr_text; |
| 953 $string =~ s/\s*,\s*//; |
| 954 $json->incr_text( $string ); |
| 955 |
| 956 incr_skip |
| 957 $json->incr_skip |
| 958 |
| 959 This will reset the state of the incremental parser and will remove the |
| 960 parsed text from the input buffer. This is useful after "incr_parse" |
| 961 died, in which case the input buffer and incremental parser state is |
| 962 left unchanged, to skip the text parsed so far and to reset the parse |
| 963 state. |
| 964 |
| 965 incr_reset |
| 966 $json->incr_reset |
| 967 |
| 968 This completely resets the incremental parser, that is, after this call, |
| 969 it will be as if the parser had never parsed anything. |
| 970 |
| 971 This is useful if you want to repeatedly parse JSON objects and want to |
| 972 ignore any trailing data, which means you have to reset the parser after |
| 973 each successful decode. |
| 974 |
| 975 See to "INCREMENTAL PARSING" in JSON::XS for examples. |
| 976 |
| 977 JSON::PP SUPPORT METHODS |
| 978 The below methods are JSON::PP own methods, so when "JSON" works with |
| 979 JSON::PP (i.e. the created object is a JSON::PP object), available. See |
| 980 to "JSON::PP OWN METHODS" in JSON::PP in detail. |
| 981 |
| 982 If you use "JSON" with additional "-support_by_pp", some methods are |
| 983 available even with JSON::XS. See to "USE PP FEATURES EVEN THOUGH XS |
| 984 BACKEND". |
| 985 |
| 986 BEING { $ENV{PERL_JSON_BACKEND} = 'JSON::XS' } |
| 987 |
| 988 use JSON -support_by_pp; |
| 989 |
| 990 my $json = JSON->new; |
| 991 $json->allow_nonref->escape_slash->encode("/"); |
| 992 |
| 993 # functional interfaces too. |
| 994 print to_json(["/"], {escape_slash => 1}); |
| 995 print from_json('["foo"]', {utf8 => 1}); |
| 996 |
| 997 If you do not want to all functions but "-support_by_pp", use |
| 998 "-no_export". |
| 999 |
| 1000 use JSON -support_by_pp, -no_export; |
| 1001 # functional interfaces are not exported. |
| 1002 |
| 1003 allow_singlequote |
| 1004 $json = $json->allow_singlequote([$enable]) |
| 1005 |
| 1006 If $enable is true (or missing), then "decode" will accept any JSON |
| 1007 strings quoted by single quotations that are invalid JSON format. |
| 1008 |
| 1009 $json->allow_singlequote->decode({"foo":'bar'}); |
| 1010 $json->allow_singlequote->decode({'foo':"bar"}); |
| 1011 $json->allow_singlequote->decode({'foo':'bar'}); |
| 1012 |
| 1013 As same as the "relaxed" option, this option may be used to parse |
| 1014 application-specific files written by humans. |
| 1015 |
| 1016 allow_barekey |
| 1017 $json = $json->allow_barekey([$enable]) |
| 1018 |
| 1019 If $enable is true (or missing), then "decode" will accept bare keys of |
| 1020 JSON object that are invalid JSON format. |
| 1021 |
| 1022 As same as the "relaxed" option, this option may be used to parse |
| 1023 application-specific files written by humans. |
| 1024 |
| 1025 $json->allow_barekey->decode('{foo:"bar"}'); |
| 1026 |
| 1027 allow_bignum |
| 1028 $json = $json->allow_bignum([$enable]) |
| 1029 |
| 1030 If $enable is true (or missing), then "decode" will convert the big |
| 1031 integer Perl cannot handle as integer into a Math::BigInt object and |
| 1032 convert a floating number (any) into a Math::BigFloat. |
| 1033 |
| 1034 On the contrary, "encode" converts "Math::BigInt" objects and |
| 1035 "Math::BigFloat" objects into JSON numbers with "allow_blessed" enable. |
| 1036 |
| 1037 $json->allow_nonref->allow_blessed->allow_bignum; |
| 1038 $bigfloat = $json->decode('2.000000000000000000000000001'); |
| 1039 print $json->encode($bigfloat); |
| 1040 # => 2.000000000000000000000000001 |
| 1041 |
| 1042 See to MAPPING about the conversion of JSON number. |
| 1043 |
| 1044 loose |
| 1045 $json = $json->loose([$enable]) |
| 1046 |
| 1047 The unescaped [\x00-\x1f\x22\x2f\x5c] strings are invalid in JSON |
| 1048 strings and the module doesn't allow to "decode" to these (except for |
| 1049 \x2f). If $enable is true (or missing), then "decode" will accept these |
| 1050 unescaped strings. |
| 1051 |
| 1052 $json->loose->decode(qq|["abc |
| 1053 def"]|); |
| 1054 |
| 1055 See to "JSON::PP OWN METHODS" in JSON::PP. |
| 1056 |
| 1057 escape_slash |
| 1058 $json = $json->escape_slash([$enable]) |
| 1059 |
| 1060 According to JSON Grammar, *slash* (U+002F) is escaped. But by default |
| 1061 JSON backend modules encode strings without escaping slash. |
| 1062 |
| 1063 If $enable is true (or missing), then "encode" will escape slashes. |
| 1064 |
| 1065 indent_length |
| 1066 $json = $json->indent_length($length) |
| 1067 |
| 1068 With JSON::XS, The indent space length is 3 and cannot be changed. With |
| 1069 JSON::PP, it sets the indent space length with the given $length. The |
| 1070 default is 3. The acceptable range is 0 to 15. |
| 1071 |
| 1072 sort_by |
| 1073 $json = $json->sort_by($function_name) |
| 1074 $json = $json->sort_by($subroutine_ref) |
| 1075 |
| 1076 If $function_name or $subroutine_ref are set, its sort routine are used. |
| 1077 |
| 1078 $js = $pc->sort_by(sub { $JSON::PP::a cmp $JSON::PP::b })->encode($obj); |
| 1079 # is($js, q|{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6,"g":7,"h":8,"i":9}|); |
| 1080 |
| 1081 $js = $pc->sort_by('own_sort')->encode($obj); |
| 1082 # is($js, q|{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6,"g":7,"h":8,"i":9}|); |
| 1083 |
| 1084 sub JSON::PP::own_sort { $JSON::PP::a cmp $JSON::PP::b } |
| 1085 |
| 1086 As the sorting routine runs in the JSON::PP scope, the given subroutine |
| 1087 name and the special variables $a, $b will begin with 'JSON::PP::'. |
| 1088 |
| 1089 If $integer is set, then the effect is same as "canonical" on. |
| 1090 |
| 1091 See to "JSON::PP OWN METHODS" in JSON::PP. |
| 1092 |
| 1093 MAPPING |
| 1094 This section is copied from JSON::XS and modified to "JSON". JSON::XS |
| 1095 and JSON::PP mapping mechanisms are almost equivalent. |
| 1096 |
| 1097 See to "MAPPING" in JSON::XS. |
| 1098 |
| 1099 JSON -> PERL |
| 1100 object |
| 1101 A JSON object becomes a reference to a hash in Perl. No ordering of |
| 1102 object keys is preserved (JSON does not preserver object key |
| 1103 ordering itself). |
| 1104 |
| 1105 array |
| 1106 A JSON array becomes a reference to an array in Perl. |
| 1107 |
| 1108 string |
| 1109 A JSON string becomes a string scalar in Perl - Unicode codepoints |
| 1110 in JSON are represented by the same codepoints in the Perl string, |
| 1111 so no manual decoding is necessary. |
| 1112 |
| 1113 number |
| 1114 A JSON number becomes either an integer, numeric (floating point) or |
| 1115 string scalar in perl, depending on its range and any fractional |
| 1116 parts. On the Perl level, there is no difference between those as |
| 1117 Perl handles all the conversion details, but an integer may take |
| 1118 slightly less memory and might represent more values exactly than |
| 1119 floating point numbers. |
| 1120 |
| 1121 If the number consists of digits only, "JSON" will try to represent |
| 1122 it as an integer value. If that fails, it will try to represent it |
| 1123 as a numeric (floating point) value if that is possible without loss |
| 1124 of precision. Otherwise it will preserve the number as a string |
| 1125 value (in which case you lose roundtripping ability, as the JSON |
| 1126 number will be re-encoded to a JSON string). |
| 1127 |
| 1128 Numbers containing a fractional or exponential part will always be |
| 1129 represented as numeric (floating point) values, possibly at a loss |
| 1130 of precision (in which case you might lose perfect roundtripping |
| 1131 ability, but the JSON number will still be re-encoded as a JSON |
| 1132 number). |
| 1133 |
| 1134 Note that precision is not accuracy - binary floating point values |
| 1135 cannot represent most decimal fractions exactly, and when converting |
| 1136 from and to floating point, "JSON" only guarantees precision up to |
| 1137 but not including the least significant bit. |
| 1138 |
| 1139 If the backend is JSON::PP and "allow_bignum" is enable, the big |
| 1140 integers and the numeric can be optionally converted into |
| 1141 Math::BigInt and Math::BigFloat objects. |
| 1142 |
| 1143 true, false |
| 1144 These JSON atoms become "JSON::true" and "JSON::false", |
| 1145 respectively. They are overloaded to act almost exactly like the |
| 1146 numbers 1 and 0. You can check whether a scalar is a JSON boolean by |
| 1147 using the "JSON::is_bool" function. |
| 1148 |
| 1149 If "JSON::true" and "JSON::false" are used as strings or compared as |
| 1150 strings, they represent as "true" and "false" respectively. |
| 1151 |
| 1152 print JSON::true . "\n"; |
| 1153 => true |
| 1154 print JSON::true + 1; |
| 1155 => 1 |
| 1156 |
| 1157 ok(JSON::true eq 'true'); |
| 1158 ok(JSON::true eq '1'); |
| 1159 ok(JSON::true == 1); |
| 1160 |
| 1161 "JSON" will install these missing overloading features to the |
| 1162 backend modules. |
| 1163 |
| 1164 null |
| 1165 A JSON null atom becomes "undef" in Perl. |
| 1166 |
| 1167 "JSON::null" returns "undef". |
| 1168 |
| 1169 PERL -> JSON |
| 1170 The mapping from Perl to JSON is slightly more difficult, as Perl is a |
| 1171 truly typeless language, so we can only guess which JSON type is meant |
| 1172 by a Perl value. |
| 1173 |
| 1174 hash references |
| 1175 Perl hash references become JSON objects. As there is no inherent |
| 1176 ordering in hash keys (or JSON objects), they will usually be |
| 1177 encoded in a pseudo-random order that can change between runs of the |
| 1178 same program but stays generally the same within a single run of a |
| 1179 program. "JSON" optionally sort the hash keys (determined by the |
| 1180 *canonical* flag), so the same data structure will serialise to the |
| 1181 same JSON text (given same settings and version of JSON::XS), but |
| 1182 this incurs a runtime overhead and is only rarely useful, e.g. when |
| 1183 you want to compare some JSON text against another for equality. |
| 1184 |
| 1185 In future, the ordered object feature will be added to JSON::PP |
| 1186 using "tie" mechanism. |
| 1187 |
| 1188 array references |
| 1189 Perl array references become JSON arrays. |
| 1190 |
| 1191 other references |
| 1192 Other unblessed references are generally not allowed and will cause |
| 1193 an exception to be thrown, except for references to the integers 0 |
| 1194 and 1, which get turned into "false" and "true" atoms in JSON. You |
| 1195 can also use "JSON::false" and "JSON::true" to improve readability. |
| 1196 |
| 1197 to_json [\0,JSON::true] # yields [false,true] |
| 1198 |
| 1199 JSON::true, JSON::false, JSON::null |
| 1200 These special values become JSON true and JSON false values, |
| 1201 respectively. You can also use "\1" and "\0" directly if you want. |
| 1202 |
| 1203 JSON::null returns "undef". |
| 1204 |
| 1205 blessed objects |
| 1206 Blessed objects are not directly representable in JSON. See the |
| 1207 "allow_blessed" and "convert_blessed" methods on various options on |
| 1208 how to deal with this: basically, you can choose between throwing an |
| 1209 exception, encoding the reference as if it weren't blessed, or |
| 1210 provide your own serialiser method. |
| 1211 |
| 1212 With "convert_blessed_universally" mode, "encode" converts blessed |
| 1213 hash references or blessed array references (contains other blessed |
| 1214 references) into JSON members and arrays. |
| 1215 |
| 1216 use JSON -convert_blessed_universally; |
| 1217 JSON->new->allow_blessed->convert_blessed->encode( $blessed_object ); |
| 1218 |
| 1219 See to convert_blessed. |
| 1220 |
| 1221 simple scalars |
| 1222 Simple Perl scalars (any scalar that is not a reference) are the |
| 1223 most difficult objects to encode: JSON::XS and JSON::PP will encode |
| 1224 undefined scalars as JSON "null" values, scalars that have last been |
| 1225 used in a string context before encoding as JSON strings, and |
| 1226 anything else as number value: |
| 1227 |
| 1228 # dump as number |
| 1229 encode_json [2] # yields [2] |
| 1230 encode_json [-3.0e17] # yields [-3e+17] |
| 1231 my $value = 5; encode_json [$value] # yields [5] |
| 1232 |
| 1233 # used as string, so dump as string |
| 1234 print $value; |
| 1235 encode_json [$value] # yields ["5"] |
| 1236 |
| 1237 # undef becomes null |
| 1238 encode_json [undef] # yields [null] |
| 1239 |
| 1240 You can force the type to be a string by stringifying it: |
| 1241 |
| 1242 my $x = 3.1; # some variable containing a number |
| 1243 "$x"; # stringified |
| 1244 $x .= ""; # another, more awkward way to stringify |
| 1245 print $x; # perl does it for you, too, quite often |
| 1246 |
| 1247 You can force the type to be a number by numifying it: |
| 1248 |
| 1249 my $x = "3"; # some variable containing a string |
| 1250 $x += 0; # numify it, ensuring it will be dumped as a number |
| 1251 $x *= 1; # same thing, the choice is yours. |
| 1252 |
| 1253 You can not currently force the type in other, less obscure, ways. |
| 1254 |
| 1255 Note that numerical precision has the same meaning as under Perl (so |
| 1256 binary to decimal conversion follows the same rules as in Perl, |
| 1257 which can differ to other languages). Also, your perl interpreter |
| 1258 might expose extensions to the floating point numbers of your |
| 1259 platform, such as infinities or NaN's - these cannot be represented |
| 1260 in JSON, and it is an error to pass those in. |
| 1261 |
| 1262 Big Number |
| 1263 If the backend is JSON::PP and "allow_bignum" is enable, "encode" |
| 1264 converts "Math::BigInt" objects and "Math::BigFloat" objects into |
| 1265 JSON numbers. |
| 1266 |
| 1267 JSON and ECMAscript |
| 1268 See to "JSON and ECMAscript" in JSON::XS. |
| 1269 |
| 1270 JSON and YAML |
| 1271 JSON is not a subset of YAML. See to "JSON and YAML" in JSON::XS. |
| 1272 |
| 1273 BACKEND MODULE DECISION |
| 1274 When you use "JSON", "JSON" tries to "use" JSON::XS. If this call |
| 1275 failed, it will "uses" JSON::PP. The required JSON::XS version is *2.2* |
| 1276 or later. |
| 1277 |
| 1278 The "JSON" constructor method returns an object inherited from the |
| 1279 backend module, and JSON::XS object is a blessed scalar reference while |
| 1280 JSON::PP is a blessed hash reference. |
| 1281 |
| 1282 So, your program should not depend on the backend module, especially |
| 1283 returned objects should not be modified. |
| 1284 |
| 1285 my $json = JSON->new; # XS or PP? |
| 1286 $json->{stash} = 'this is xs object'; # this code may raise an error! |
| 1287 |
| 1288 To check the backend module, there are some methods - "backend", "is_pp" |
| 1289 and "is_xs". |
| 1290 |
| 1291 JSON->backend; # 'JSON::XS' or 'JSON::PP' |
| 1292 |
| 1293 JSON->backend->is_pp: # 0 or 1 |
| 1294 |
| 1295 JSON->backend->is_xs: # 1 or 0 |
| 1296 |
| 1297 $json->is_xs; # 1 or 0 |
| 1298 |
| 1299 $json->is_pp; # 0 or 1 |
| 1300 |
| 1301 If you set an environment variable "PERL_JSON_BACKEND", the calling |
| 1302 action will be changed. |
| 1303 |
| 1304 PERL_JSON_BACKEND = 0 or PERL_JSON_BACKEND = 'JSON::PP' |
| 1305 Always use JSON::PP |
| 1306 |
| 1307 PERL_JSON_BACKEND == 1 or PERL_JSON_BACKEND = 'JSON::XS,JSON::PP' |
| 1308 (The default) Use compiled JSON::XS if it is properly compiled & |
| 1309 installed, otherwise use JSON::PP. |
| 1310 |
| 1311 PERL_JSON_BACKEND == 2 or PERL_JSON_BACKEND = 'JSON::XS' |
| 1312 Always use compiled JSON::XS, die if it isn't properly compiled & |
| 1313 installed. |
| 1314 |
| 1315 PERL_JSON_BACKEND = 'JSON::backportPP' |
| 1316 Always use JSON::backportPP. JSON::backportPP is JSON::PP back port |
| 1317 module. "JSON" includes JSON::backportPP instead of JSON::PP. |
| 1318 |
| 1319 These ideas come from DBI::PurePerl mechanism. |
| 1320 |
| 1321 example: |
| 1322 |
| 1323 BEGIN { $ENV{PERL_JSON_BACKEND} = 'JSON::PP' } |
| 1324 use JSON; # always uses JSON::PP |
| 1325 |
| 1326 In future, it may be able to specify another module. |
| 1327 |
| 1328 USE PP FEATURES EVEN THOUGH XS BACKEND |
| 1329 Many methods are available with either JSON::XS or JSON::PP and when the |
| 1330 backend module is JSON::XS, if any JSON::PP specific (i.e. JSON::XS |
| 1331 unsupported) method is called, it will "warn" and be noop. |
| 1332 |
| 1333 But If you "use" "JSON" passing the optional string "-support_by_pp", it |
| 1334 makes a part of those unsupported methods available. This feature is |
| 1335 achieved by using JSON::PP in "de/encode". |
| 1336 |
| 1337 BEGIN { $ENV{PERL_JSON_BACKEND} = 2 } # with JSON::XS |
| 1338 use JSON -support_by_pp; |
| 1339 my $json = JSON->new; |
| 1340 $json->allow_nonref->escape_slash->encode("/"); |
| 1341 |
| 1342 At this time, the returned object is a "JSON::Backend::XS::Supportable" |
| 1343 object (re-blessed XS object), and by checking JSON::XS unsupported |
| 1344 flags in de/encoding, can support some unsupported methods - "loose", |
| 1345 "allow_bignum", "allow_barekey", "allow_singlequote", "escape_slash" and |
| 1346 "indent_length". |
| 1347 |
| 1348 When any unsupported methods are not enable, "XS de/encode" will be used |
| 1349 as is. The switch is achieved by changing the symbolic tables. |
| 1350 |
| 1351 "-support_by_pp" is effective only when the backend module is JSON::XS |
| 1352 and it makes the de/encoding speed down a bit. |
| 1353 |
| 1354 See to "JSON::PP SUPPORT METHODS". |
| 1355 |
| 1356 INCOMPATIBLE CHANGES TO OLD VERSION |
| 1357 There are big incompatibility between new version (2.00) and old (1.xx). |
| 1358 If you use old "JSON" 1.xx in your code, please check it. |
| 1359 |
| 1360 See to "Transition ways from 1.xx to 2.xx." |
| 1361 |
| 1362 jsonToObj and objToJson are obsoleted. |
| 1363 Non Perl-style name "jsonToObj" and "objToJson" are obsoleted (but |
| 1364 not yet deleted from the source). If you use these functions in your |
| 1365 code, please replace them with "from_json" and "to_json". |
| 1366 |
| 1367 Global variables are no longer available. |
| 1368 "JSON" class variables - $JSON::AUTOCONVERT, $JSON::BareKey, etc... |
| 1369 - are not available any longer. Instead, various features can be |
| 1370 used through object methods. |
| 1371 |
| 1372 Package JSON::Converter and JSON::Parser are deleted. |
| 1373 Now "JSON" bundles with JSON::PP which can handle JSON more properly |
| 1374 than them. |
| 1375 |
| 1376 Package JSON::NotString is deleted. |
| 1377 There was "JSON::NotString" class which represents JSON value |
| 1378 "true", "false", "null" and numbers. It was deleted and replaced by |
| 1379 "JSON::Boolean". |
| 1380 |
| 1381 "JSON::Boolean" represents "true" and "false". |
| 1382 |
| 1383 "JSON::Boolean" does not represent "null". |
| 1384 |
| 1385 "JSON::null" returns "undef". |
| 1386 |
| 1387 "JSON" makes JSON::XS::Boolean and JSON::PP::Boolean is-a relation |
| 1388 to JSON::Boolean. |
| 1389 |
| 1390 function JSON::Number is obsoleted. |
| 1391 "JSON::Number" is now needless because JSON::XS and JSON::PP have |
| 1392 round-trip integrity. |
| 1393 |
| 1394 JSONRPC modules are deleted. |
| 1395 Perl implementation of JSON-RPC protocol - "JSONRPC ", |
| 1396 "JSONRPC::Transport::HTTP" and "Apache::JSONRPC " are deleted in |
| 1397 this distribution. Instead of them, there is JSON::RPC which |
| 1398 supports JSON-RPC protocol version 1.1. |
| 1399 |
| 1400 Transition ways from 1.xx to 2.xx. |
| 1401 You should set "suport_by_pp" mode firstly, because it is always |
| 1402 successful for the below codes even with JSON::XS. |
| 1403 |
| 1404 use JSON -support_by_pp; |
| 1405 |
| 1406 Exported jsonToObj (simple) |
| 1407 from_json($json_text); |
| 1408 |
| 1409 Exported objToJson (simple) |
| 1410 to_json($perl_scalar); |
| 1411 |
| 1412 Exported jsonToObj (advanced) |
| 1413 $flags = {allow_barekey => 1, allow_singlequote => 1}; |
| 1414 from_json($json_text, $flags); |
| 1415 |
| 1416 equivalent to: |
| 1417 |
| 1418 $JSON::BareKey = 1; |
| 1419 $JSON::QuotApos = 1; |
| 1420 jsonToObj($json_text); |
| 1421 |
| 1422 Exported objToJson (advanced) |
| 1423 $flags = {allow_blessed => 1, allow_barekey => 1}; |
| 1424 to_json($perl_scalar, $flags); |
| 1425 |
| 1426 equivalent to: |
| 1427 |
| 1428 $JSON::BareKey = 1; |
| 1429 objToJson($perl_scalar); |
| 1430 |
| 1431 jsonToObj as object method |
| 1432 $json->decode($json_text); |
| 1433 |
| 1434 objToJson as object method |
| 1435 $json->encode($perl_scalar); |
| 1436 |
| 1437 new method with parameters |
| 1438 The "new" method in 2.x takes any parameters no longer. You can set |
| 1439 parameters instead; |
| 1440 |
| 1441 $json = JSON->new->pretty; |
| 1442 |
| 1443 $JSON::Pretty, $JSON::Indent, $JSON::Delimiter |
| 1444 If "indent" is enable, that means $JSON::Pretty flag set. And |
| 1445 $JSON::Delimiter was substituted by "space_before" and |
| 1446 "space_after". In conclusion: |
| 1447 |
| 1448 $json->indent->space_before->space_after; |
| 1449 |
| 1450 Equivalent to: |
| 1451 |
| 1452 $json->pretty; |
| 1453 |
| 1454 To change indent length, use "indent_length". |
| 1455 |
| 1456 (Only with JSON::PP, if "-support_by_pp" is not used.) |
| 1457 |
| 1458 $json->pretty->indent_length(2)->encode($perl_scalar); |
| 1459 |
| 1460 $JSON::BareKey |
| 1461 (Only with JSON::PP, if "-support_by_pp" is not used.) |
| 1462 |
| 1463 $json->allow_barekey->decode($json_text) |
| 1464 |
| 1465 $JSON::ConvBlessed |
| 1466 use "-convert_blessed_universally". See to convert_blessed. |
| 1467 |
| 1468 $JSON::QuotApos |
| 1469 (Only with JSON::PP, if "-support_by_pp" is not used.) |
| 1470 |
| 1471 $json->allow_singlequote->decode($json_text) |
| 1472 |
| 1473 $JSON::SingleQuote |
| 1474 Disable. "JSON" does not make such a invalid JSON string any longer. |
| 1475 |
| 1476 $JSON::KeySort |
| 1477 $json->canonical->encode($perl_scalar) |
| 1478 |
| 1479 This is the ascii sort. |
| 1480 |
| 1481 If you want to use with your own sort routine, check the "sort_by" |
| 1482 method. |
| 1483 |
| 1484 (Only with JSON::PP, even if "-support_by_pp" is used currently.) |
| 1485 |
| 1486 $json->sort_by($sort_routine_ref)->encode($perl_scalar) |
| 1487 |
| 1488 $json->sort_by(sub { $JSON::PP::a <=> $JSON::PP::b })->encode($perl_sc
alar) |
| 1489 |
| 1490 Can't access $a and $b but $JSON::PP::a and $JSON::PP::b. |
| 1491 |
| 1492 $JSON::SkipInvalid |
| 1493 $json->allow_unknown |
| 1494 |
| 1495 $JSON::AUTOCONVERT |
| 1496 Needless. "JSON" backend modules have the round-trip integrity. |
| 1497 |
| 1498 $JSON::UTF8 |
| 1499 Needless because "JSON" (JSON::XS/JSON::PP) sets the UTF8 flag on |
| 1500 properly. |
| 1501 |
| 1502 # With UTF8-flagged strings |
| 1503 |
| 1504 $json->allow_nonref; |
| 1505 $str = chr(1000); # UTF8-flagged |
| 1506 |
| 1507 $json_text = $json->utf8(0)->encode($str); |
| 1508 utf8::is_utf8($json_text); |
| 1509 # true |
| 1510 $json_text = $json->utf8(1)->encode($str); |
| 1511 utf8::is_utf8($json_text); |
| 1512 # false |
| 1513 |
| 1514 $str = '"' . chr(1000) . '"'; # UTF8-flagged |
| 1515 |
| 1516 $perl_scalar = $json->utf8(0)->decode($str); |
| 1517 utf8::is_utf8($perl_scalar); |
| 1518 # true |
| 1519 $perl_scalar = $json->utf8(1)->decode($str); |
| 1520 # died because of 'Wide character in subroutine' |
| 1521 |
| 1522 See to "A FEW NOTES ON UNICODE AND PERL" in JSON::XS. |
| 1523 |
| 1524 $JSON::UnMapping |
| 1525 Disable. See to MAPPING. |
| 1526 |
| 1527 $JSON::SelfConvert |
| 1528 This option was deleted. Instead of it, if a given blessed object |
| 1529 has the "TO_JSON" method, "TO_JSON" will be executed with |
| 1530 "convert_blessed". |
| 1531 |
| 1532 $json->convert_blessed->encode($blessed_hashref_or_arrayref) |
| 1533 # if need, call allow_blessed |
| 1534 |
| 1535 Note that it was "toJson" in old version, but now not "toJson" but |
| 1536 "TO_JSON". |
| 1537 |
| 1538 TODO |
| 1539 example programs |
| 1540 |
| 1541 THREADS |
| 1542 No test with JSON::PP. If with JSON::XS, See to "THREADS" in JSON::XS. |
| 1543 |
| 1544 BUGS |
| 1545 Please report bugs relevant to "JSON" to <makamaka[at]cpan.org>. |
| 1546 |
| 1547 SEE ALSO |
| 1548 Most of the document is copied and modified from JSON::XS doc. |
| 1549 |
| 1550 JSON::XS, JSON::PP |
| 1551 |
| 1552 "RFC4627"(<http://www.ietf.org/rfc/rfc4627.txt>) |
| 1553 |
| 1554 AUTHOR |
| 1555 Makamaka Hannyaharamitu, <makamaka[at]cpan.org> |
| 1556 |
| 1557 JSON::XS was written by Marc Lehmann <schmorp[at]schmorp.de> |
| 1558 |
| 1559 The release of this new version owes to the courtesy of Marc Lehmann. |
| 1560 |
| 1561 COPYRIGHT AND LICENSE |
| 1562 Copyright 2005-2013 by Makamaka Hannyaharamitu |
| 1563 |
| 1564 This library is free software; you can redistribute it and/or modify it |
| 1565 under the same terms as Perl itself. |
| 1566 |
OLD | NEW |