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_scalar) 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 1567