1package JSON::PP; 2 3# JSON-2.0 4 5use 5.005; 6use strict; 7 8use Exporter (); 9BEGIN { @JSON::PP::ISA = ('Exporter') } 10 11use overload (); 12use JSON::PP::Boolean; 13 14use Carp (); 15#use Devel::Peek; 16 17$JSON::PP::VERSION = '4.04'; 18 19@JSON::PP::EXPORT = qw(encode_json decode_json from_json to_json); 20 21# instead of hash-access, i tried index-access for speed. 22# but this method is not faster than what i expected. so it will be changed. 23 24use constant P_ASCII => 0; 25use constant P_LATIN1 => 1; 26use constant P_UTF8 => 2; 27use constant P_INDENT => 3; 28use constant P_CANONICAL => 4; 29use constant P_SPACE_BEFORE => 5; 30use constant P_SPACE_AFTER => 6; 31use constant P_ALLOW_NONREF => 7; 32use constant P_SHRINK => 8; 33use constant P_ALLOW_BLESSED => 9; 34use constant P_CONVERT_BLESSED => 10; 35use constant P_RELAXED => 11; 36 37use constant P_LOOSE => 12; 38use constant P_ALLOW_BIGNUM => 13; 39use constant P_ALLOW_BAREKEY => 14; 40use constant P_ALLOW_SINGLEQUOTE => 15; 41use constant P_ESCAPE_SLASH => 16; 42use constant P_AS_NONBLESSED => 17; 43 44use constant P_ALLOW_UNKNOWN => 18; 45use constant P_ALLOW_TAGS => 19; 46 47use constant OLD_PERL => $] < 5.008 ? 1 : 0; 48use constant USE_B => $ENV{PERL_JSON_PP_USE_B} || 0; 49 50BEGIN { 51 if (USE_B) { 52 require B; 53 } 54} 55 56BEGIN { 57 my @xs_compati_bit_properties = qw( 58 latin1 ascii utf8 indent canonical space_before space_after allow_nonref shrink 59 allow_blessed convert_blessed relaxed allow_unknown 60 allow_tags 61 ); 62 my @pp_bit_properties = qw( 63 allow_singlequote allow_bignum loose 64 allow_barekey escape_slash as_nonblessed 65 ); 66 67 # Perl version check, Unicode handling is enabled? 68 # Helper module sets @JSON::PP::_properties. 69 if ( OLD_PERL ) { 70 my $helper = $] >= 5.006 ? 'JSON::PP::Compat5006' : 'JSON::PP::Compat5005'; 71 eval qq| require $helper |; 72 if ($@) { Carp::croak $@; } 73 } 74 75 for my $name (@xs_compati_bit_properties, @pp_bit_properties) { 76 my $property_id = 'P_' . uc($name); 77 78 eval qq/ 79 sub $name { 80 my \$enable = defined \$_[1] ? \$_[1] : 1; 81 82 if (\$enable) { 83 \$_[0]->{PROPS}->[$property_id] = 1; 84 } 85 else { 86 \$_[0]->{PROPS}->[$property_id] = 0; 87 } 88 89 \$_[0]; 90 } 91 92 sub get_$name { 93 \$_[0]->{PROPS}->[$property_id] ? 1 : ''; 94 } 95 /; 96 } 97 98} 99 100 101 102# Functions 103 104my $JSON; # cache 105 106sub encode_json ($) { # encode 107 ($JSON ||= __PACKAGE__->new->utf8)->encode(@_); 108} 109 110 111sub decode_json { # decode 112 ($JSON ||= __PACKAGE__->new->utf8)->decode(@_); 113} 114 115# Obsoleted 116 117sub to_json($) { 118 Carp::croak ("JSON::PP::to_json has been renamed to encode_json."); 119} 120 121 122sub from_json($) { 123 Carp::croak ("JSON::PP::from_json has been renamed to decode_json."); 124} 125 126 127# Methods 128 129sub new { 130 my $class = shift; 131 my $self = { 132 max_depth => 512, 133 max_size => 0, 134 indent_length => 3, 135 }; 136 137 $self->{PROPS}[P_ALLOW_NONREF] = 1; 138 139 bless $self, $class; 140} 141 142 143sub encode { 144 return $_[0]->PP_encode_json($_[1]); 145} 146 147 148sub decode { 149 return $_[0]->PP_decode_json($_[1], 0x00000000); 150} 151 152 153sub decode_prefix { 154 return $_[0]->PP_decode_json($_[1], 0x00000001); 155} 156 157 158# accessor 159 160 161# pretty printing 162 163sub pretty { 164 my ($self, $v) = @_; 165 my $enable = defined $v ? $v : 1; 166 167 if ($enable) { # indent_length(3) for JSON::XS compatibility 168 $self->indent(1)->space_before(1)->space_after(1); 169 } 170 else { 171 $self->indent(0)->space_before(0)->space_after(0); 172 } 173 174 $self; 175} 176 177# etc 178 179sub max_depth { 180 my $max = defined $_[1] ? $_[1] : 0x80000000; 181 $_[0]->{max_depth} = $max; 182 $_[0]; 183} 184 185 186sub get_max_depth { $_[0]->{max_depth}; } 187 188 189sub max_size { 190 my $max = defined $_[1] ? $_[1] : 0; 191 $_[0]->{max_size} = $max; 192 $_[0]; 193} 194 195 196sub get_max_size { $_[0]->{max_size}; } 197 198sub boolean_values { 199 my $self = shift; 200 if (@_) { 201 my ($false, $true) = @_; 202 $self->{false} = $false; 203 $self->{true} = $true; 204 return ($false, $true); 205 } else { 206 delete $self->{false}; 207 delete $self->{true}; 208 return; 209 } 210} 211 212sub get_boolean_values { 213 my $self = shift; 214 if (exists $self->{true} and exists $self->{false}) { 215 return @$self{qw/false true/}; 216 } 217 return; 218} 219 220sub filter_json_object { 221 if (defined $_[1] and ref $_[1] eq 'CODE') { 222 $_[0]->{cb_object} = $_[1]; 223 } else { 224 delete $_[0]->{cb_object}; 225 } 226 $_[0]->{F_HOOK} = ($_[0]->{cb_object} or $_[0]->{cb_sk_object}) ? 1 : 0; 227 $_[0]; 228} 229 230sub filter_json_single_key_object { 231 if (@_ == 1 or @_ > 3) { 232 Carp::croak("Usage: JSON::PP::filter_json_single_key_object(self, key, callback = undef)"); 233 } 234 if (defined $_[2] and ref $_[2] eq 'CODE') { 235 $_[0]->{cb_sk_object}->{$_[1]} = $_[2]; 236 } else { 237 delete $_[0]->{cb_sk_object}->{$_[1]}; 238 delete $_[0]->{cb_sk_object} unless %{$_[0]->{cb_sk_object} || {}}; 239 } 240 $_[0]->{F_HOOK} = ($_[0]->{cb_object} or $_[0]->{cb_sk_object}) ? 1 : 0; 241 $_[0]; 242} 243 244sub indent_length { 245 if (!defined $_[1] or $_[1] > 15 or $_[1] < 0) { 246 Carp::carp "The acceptable range of indent_length() is 0 to 15."; 247 } 248 else { 249 $_[0]->{indent_length} = $_[1]; 250 } 251 $_[0]; 252} 253 254sub get_indent_length { 255 $_[0]->{indent_length}; 256} 257 258sub sort_by { 259 $_[0]->{sort_by} = defined $_[1] ? $_[1] : 1; 260 $_[0]; 261} 262 263sub allow_bigint { 264 Carp::carp("allow_bigint() is obsoleted. use allow_bignum() instead."); 265 $_[0]->allow_bignum; 266} 267 268############################### 269 270### 271### Perl => JSON 272### 273 274 275{ # Convert 276 277 my $max_depth; 278 my $indent; 279 my $ascii; 280 my $latin1; 281 my $utf8; 282 my $space_before; 283 my $space_after; 284 my $canonical; 285 my $allow_blessed; 286 my $convert_blessed; 287 288 my $indent_length; 289 my $escape_slash; 290 my $bignum; 291 my $as_nonblessed; 292 my $allow_tags; 293 294 my $depth; 295 my $indent_count; 296 my $keysort; 297 298 299 sub PP_encode_json { 300 my $self = shift; 301 my $obj = shift; 302 303 $indent_count = 0; 304 $depth = 0; 305 306 my $props = $self->{PROPS}; 307 308 ($ascii, $latin1, $utf8, $indent, $canonical, $space_before, $space_after, $allow_blessed, 309 $convert_blessed, $escape_slash, $bignum, $as_nonblessed, $allow_tags) 310 = @{$props}[P_ASCII .. P_SPACE_AFTER, P_ALLOW_BLESSED, P_CONVERT_BLESSED, 311 P_ESCAPE_SLASH, P_ALLOW_BIGNUM, P_AS_NONBLESSED, P_ALLOW_TAGS]; 312 313 ($max_depth, $indent_length) = @{$self}{qw/max_depth indent_length/}; 314 315 $keysort = $canonical ? sub { $a cmp $b } : undef; 316 317 if ($self->{sort_by}) { 318 $keysort = ref($self->{sort_by}) eq 'CODE' ? $self->{sort_by} 319 : $self->{sort_by} =~ /\D+/ ? $self->{sort_by} 320 : sub { $a cmp $b }; 321 } 322 323 encode_error("hash- or arrayref expected (not a simple scalar, use allow_nonref to allow this)") 324 if(!ref $obj and !$props->[ P_ALLOW_NONREF ]); 325 326 my $str = $self->object_to_json($obj); 327 328 $str .= "\n" if ( $indent ); # JSON::XS 2.26 compatible 329 330 unless ($ascii or $latin1 or $utf8) { 331 utf8::upgrade($str); 332 } 333 334 if ($props->[ P_SHRINK ]) { 335 utf8::downgrade($str, 1); 336 } 337 338 return $str; 339 } 340 341 342 sub object_to_json { 343 my ($self, $obj) = @_; 344 my $type = ref($obj); 345 346 if($type eq 'HASH'){ 347 return $self->hash_to_json($obj); 348 } 349 elsif($type eq 'ARRAY'){ 350 return $self->array_to_json($obj); 351 } 352 elsif ($type) { # blessed object? 353 if (blessed($obj)) { 354 355 return $self->value_to_json($obj) if ( $obj->isa('JSON::PP::Boolean') ); 356 357 if ( $allow_tags and $obj->can('FREEZE') ) { 358 my $obj_class = ref $obj || $obj; 359 $obj = bless $obj, $obj_class; 360 my @results = $obj->FREEZE('JSON'); 361 if ( @results and ref $results[0] ) { 362 if ( refaddr( $obj ) eq refaddr( $results[0] ) ) { 363 encode_error( sprintf( 364 "%s::FREEZE method returned same object as was passed instead of a new one", 365 ref $obj 366 ) ); 367 } 368 } 369 return '("'.$obj_class.'")['.join(',', @results).']'; 370 } 371 372 if ( $convert_blessed and $obj->can('TO_JSON') ) { 373 my $result = $obj->TO_JSON(); 374 if ( defined $result and ref( $result ) ) { 375 if ( refaddr( $obj ) eq refaddr( $result ) ) { 376 encode_error( sprintf( 377 "%s::TO_JSON method returned same object as was passed instead of a new one", 378 ref $obj 379 ) ); 380 } 381 } 382 383 return $self->object_to_json( $result ); 384 } 385 386 return "$obj" if ( $bignum and _is_bignum($obj) ); 387 388 if ($allow_blessed) { 389 return $self->blessed_to_json($obj) if ($as_nonblessed); # will be removed. 390 return 'null'; 391 } 392 encode_error( sprintf("encountered object '%s', but neither allow_blessed, convert_blessed nor allow_tags settings are enabled (or TO_JSON/FREEZE method missing)", $obj) 393 ); 394 } 395 else { 396 return $self->value_to_json($obj); 397 } 398 } 399 else{ 400 return $self->value_to_json($obj); 401 } 402 } 403 404 405 sub hash_to_json { 406 my ($self, $obj) = @_; 407 my @res; 408 409 encode_error("json text or perl structure exceeds maximum nesting level (max_depth set too low?)") 410 if (++$depth > $max_depth); 411 412 my ($pre, $post) = $indent ? $self->_up_indent() : ('', ''); 413 my $del = ($space_before ? ' ' : '') . ':' . ($space_after ? ' ' : ''); 414 415 for my $k ( _sort( $obj ) ) { 416 if ( OLD_PERL ) { utf8::decode($k) } # key for Perl 5.6 / be optimized 417 push @res, $self->string_to_json( $k ) 418 . $del 419 . ( ref $obj->{$k} ? $self->object_to_json( $obj->{$k} ) : $self->value_to_json( $obj->{$k} ) ); 420 } 421 422 --$depth; 423 $self->_down_indent() if ($indent); 424 425 return '{}' unless @res; 426 return '{' . $pre . join( ",$pre", @res ) . $post . '}'; 427 } 428 429 430 sub array_to_json { 431 my ($self, $obj) = @_; 432 my @res; 433 434 encode_error("json text or perl structure exceeds maximum nesting level (max_depth set too low?)") 435 if (++$depth > $max_depth); 436 437 my ($pre, $post) = $indent ? $self->_up_indent() : ('', ''); 438 439 for my $v (@$obj){ 440 push @res, ref($v) ? $self->object_to_json($v) : $self->value_to_json($v); 441 } 442 443 --$depth; 444 $self->_down_indent() if ($indent); 445 446 return '[]' unless @res; 447 return '[' . $pre . join( ",$pre", @res ) . $post . ']'; 448 } 449 450 sub _looks_like_number { 451 my $value = shift; 452 if (USE_B) { 453 my $b_obj = B::svref_2object(\$value); 454 my $flags = $b_obj->FLAGS; 455 return 1 if $flags & ( B::SVp_IOK() | B::SVp_NOK() ) and !( $flags & B::SVp_POK() ); 456 return; 457 } else { 458 no warnings 'numeric'; 459 # if the utf8 flag is on, it almost certainly started as a string 460 return if utf8::is_utf8($value); 461 # detect numbers 462 # string & "" -> "" 463 # number & "" -> 0 (with warning) 464 # nan and inf can detect as numbers, so check with * 0 465 return unless length((my $dummy = "") & $value); 466 return unless 0 + $value eq $value; 467 return 1 if $value * 0 == 0; 468 return -1; # inf/nan 469 } 470 } 471 472 sub value_to_json { 473 my ($self, $value) = @_; 474 475 return 'null' if(!defined $value); 476 477 my $type = ref($value); 478 479 if (!$type) { 480 if (_looks_like_number($value)) { 481 return $value; 482 } 483 return $self->string_to_json($value); 484 } 485 elsif( blessed($value) and $value->isa('JSON::PP::Boolean') ){ 486 return $$value == 1 ? 'true' : 'false'; 487 } 488 else { 489 if ((overload::StrVal($value) =~ /=(\w+)/)[0]) { 490 return $self->value_to_json("$value"); 491 } 492 493 if ($type eq 'SCALAR' and defined $$value) { 494 return $$value eq '1' ? 'true' 495 : $$value eq '0' ? 'false' 496 : $self->{PROPS}->[ P_ALLOW_UNKNOWN ] ? 'null' 497 : encode_error("cannot encode reference to scalar"); 498 } 499 500 if ( $self->{PROPS}->[ P_ALLOW_UNKNOWN ] ) { 501 return 'null'; 502 } 503 else { 504 if ( $type eq 'SCALAR' or $type eq 'REF' ) { 505 encode_error("cannot encode reference to scalar"); 506 } 507 else { 508 encode_error("encountered $value, but JSON can only represent references to arrays or hashes"); 509 } 510 } 511 512 } 513 } 514 515 516 my %esc = ( 517 "\n" => '\n', 518 "\r" => '\r', 519 "\t" => '\t', 520 "\f" => '\f', 521 "\b" => '\b', 522 "\"" => '\"', 523 "\\" => '\\\\', 524 "\'" => '\\\'', 525 ); 526 527 528 sub string_to_json { 529 my ($self, $arg) = @_; 530 531 $arg =~ s/([\x22\x5c\n\r\t\f\b])/$esc{$1}/g; 532 $arg =~ s/\//\\\//g if ($escape_slash); 533 $arg =~ s/([\x00-\x08\x0b\x0e-\x1f])/'\\u00' . unpack('H2', $1)/eg; 534 535 if ($ascii) { 536 $arg = JSON_PP_encode_ascii($arg); 537 } 538 539 if ($latin1) { 540 $arg = JSON_PP_encode_latin1($arg); 541 } 542 543 if ($utf8) { 544 utf8::encode($arg); 545 } 546 547 return '"' . $arg . '"'; 548 } 549 550 551 sub blessed_to_json { 552 my $reftype = reftype($_[1]) || ''; 553 if ($reftype eq 'HASH') { 554 return $_[0]->hash_to_json($_[1]); 555 } 556 elsif ($reftype eq 'ARRAY') { 557 return $_[0]->array_to_json($_[1]); 558 } 559 else { 560 return 'null'; 561 } 562 } 563 564 565 sub encode_error { 566 my $error = shift; 567 Carp::croak "$error"; 568 } 569 570 571 sub _sort { 572 defined $keysort ? (sort $keysort (keys %{$_[0]})) : keys %{$_[0]}; 573 } 574 575 576 sub _up_indent { 577 my $self = shift; 578 my $space = ' ' x $indent_length; 579 580 my ($pre,$post) = ('',''); 581 582 $post = "\n" . $space x $indent_count; 583 584 $indent_count++; 585 586 $pre = "\n" . $space x $indent_count; 587 588 return ($pre,$post); 589 } 590 591 592 sub _down_indent { $indent_count--; } 593 594 595 sub PP_encode_box { 596 { 597 depth => $depth, 598 indent_count => $indent_count, 599 }; 600 } 601 602} # Convert 603 604 605sub _encode_ascii { 606 join('', 607 map { 608 $_ <= 127 ? 609 chr($_) : 610 $_ <= 65535 ? 611 sprintf('\u%04x', $_) : sprintf('\u%x\u%x', _encode_surrogates($_)); 612 } unpack('U*', $_[0]) 613 ); 614} 615 616 617sub _encode_latin1 { 618 join('', 619 map { 620 $_ <= 255 ? 621 chr($_) : 622 $_ <= 65535 ? 623 sprintf('\u%04x', $_) : sprintf('\u%x\u%x', _encode_surrogates($_)); 624 } unpack('U*', $_[0]) 625 ); 626} 627 628 629sub _encode_surrogates { # from perlunicode 630 my $uni = $_[0] - 0x10000; 631 return ($uni / 0x400 + 0xD800, $uni % 0x400 + 0xDC00); 632} 633 634 635sub _is_bignum { 636 $_[0]->isa('Math::BigInt') or $_[0]->isa('Math::BigFloat'); 637} 638 639 640 641# 642# JSON => Perl 643# 644 645my $max_intsize; 646 647BEGIN { 648 my $checkint = 1111; 649 for my $d (5..64) { 650 $checkint .= 1; 651 my $int = eval qq| $checkint |; 652 if ($int =~ /[eE]/) { 653 $max_intsize = $d - 1; 654 last; 655 } 656 } 657} 658 659{ # PARSE 660 661 my %escapes = ( # by Jeremy Muhlich <jmuhlich [at] bitflood.org> 662 b => "\x8", 663 t => "\x9", 664 n => "\xA", 665 f => "\xC", 666 r => "\xD", 667 '\\' => '\\', 668 '"' => '"', 669 '/' => '/', 670 ); 671 672 my $text; # json data 673 my $at; # offset 674 my $ch; # first character 675 my $len; # text length (changed according to UTF8 or NON UTF8) 676 # INTERNAL 677 my $depth; # nest counter 678 my $encoding; # json text encoding 679 my $is_valid_utf8; # temp variable 680 my $utf8_len; # utf8 byte length 681 # FLAGS 682 my $utf8; # must be utf8 683 my $max_depth; # max nest number of objects and arrays 684 my $max_size; 685 my $relaxed; 686 my $cb_object; 687 my $cb_sk_object; 688 689 my $F_HOOK; 690 691 my $allow_bignum; # using Math::BigInt/BigFloat 692 my $singlequote; # loosely quoting 693 my $loose; # 694 my $allow_barekey; # bareKey 695 my $allow_tags; 696 697 my $alt_true; 698 my $alt_false; 699 700 sub _detect_utf_encoding { 701 my $text = shift; 702 my @octets = unpack('C4', $text); 703 return 'unknown' unless defined $octets[3]; 704 return ( $octets[0] and $octets[1]) ? 'UTF-8' 705 : (!$octets[0] and $octets[1]) ? 'UTF-16BE' 706 : (!$octets[0] and !$octets[1]) ? 'UTF-32BE' 707 : ( $octets[2] ) ? 'UTF-16LE' 708 : (!$octets[2] ) ? 'UTF-32LE' 709 : 'unknown'; 710 } 711 712 sub PP_decode_json { 713 my ($self, $want_offset); 714 715 ($self, $text, $want_offset) = @_; 716 717 ($at, $ch, $depth) = (0, '', 0); 718 719 if ( !defined $text or ref $text ) { 720 decode_error("malformed JSON string, neither array, object, number, string or atom"); 721 } 722 723 my $props = $self->{PROPS}; 724 725 ($utf8, $relaxed, $loose, $allow_bignum, $allow_barekey, $singlequote, $allow_tags) 726 = @{$props}[P_UTF8, P_RELAXED, P_LOOSE .. P_ALLOW_SINGLEQUOTE, P_ALLOW_TAGS]; 727 728 ($alt_true, $alt_false) = @$self{qw/true false/}; 729 730 if ( $utf8 ) { 731 $encoding = _detect_utf_encoding($text); 732 if ($encoding ne 'UTF-8' and $encoding ne 'unknown') { 733 require Encode; 734 Encode::from_to($text, $encoding, 'utf-8'); 735 } else { 736 utf8::downgrade( $text, 1 ) or Carp::croak("Wide character in subroutine entry"); 737 } 738 } 739 else { 740 utf8::upgrade( $text ); 741 utf8::encode( $text ); 742 } 743 744 $len = length $text; 745 746 ($max_depth, $max_size, $cb_object, $cb_sk_object, $F_HOOK) 747 = @{$self}{qw/max_depth max_size cb_object cb_sk_object F_HOOK/}; 748 749 if ($max_size > 1) { 750 use bytes; 751 my $bytes = length $text; 752 decode_error( 753 sprintf("attempted decode of JSON text of %s bytes size, but max_size is set to %s" 754 , $bytes, $max_size), 1 755 ) if ($bytes > $max_size); 756 } 757 758 white(); # remove head white space 759 760 decode_error("malformed JSON string, neither array, object, number, string or atom") unless defined $ch; # Is there a first character for JSON structure? 761 762 my $result = value(); 763 764 if ( !$props->[ P_ALLOW_NONREF ] and !ref $result ) { 765 decode_error( 766 'JSON text must be an object or array (but found number, string, true, false or null,' 767 . ' use allow_nonref to allow this)', 1); 768 } 769 770 Carp::croak('something wrong.') if $len < $at; # we won't arrive here. 771 772 my $consumed = defined $ch ? $at - 1 : $at; # consumed JSON text length 773 774 white(); # remove tail white space 775 776 return ( $result, $consumed ) if $want_offset; # all right if decode_prefix 777 778 decode_error("garbage after JSON object") if defined $ch; 779 780 $result; 781 } 782 783 784 sub next_chr { 785 return $ch = undef if($at >= $len); 786 $ch = substr($text, $at++, 1); 787 } 788 789 790 sub value { 791 white(); 792 return if(!defined $ch); 793 return object() if($ch eq '{'); 794 return array() if($ch eq '['); 795 return tag() if($ch eq '('); 796 return string() if($ch eq '"' or ($singlequote and $ch eq "'")); 797 return number() if($ch =~ /[0-9]/ or $ch eq '-'); 798 return word(); 799 } 800 801 sub string { 802 my $utf16; 803 my $is_utf8; 804 805 ($is_valid_utf8, $utf8_len) = ('', 0); 806 807 my $s = ''; # basically UTF8 flag on 808 809 if($ch eq '"' or ($singlequote and $ch eq "'")){ 810 my $boundChar = $ch; 811 812 OUTER: while( defined(next_chr()) ){ 813 814 if($ch eq $boundChar){ 815 next_chr(); 816 817 if ($utf16) { 818 decode_error("missing low surrogate character in surrogate pair"); 819 } 820 821 utf8::decode($s) if($is_utf8); 822 823 return $s; 824 } 825 elsif($ch eq '\\'){ 826 next_chr(); 827 if(exists $escapes{$ch}){ 828 $s .= $escapes{$ch}; 829 } 830 elsif($ch eq 'u'){ # UNICODE handling 831 my $u = ''; 832 833 for(1..4){ 834 $ch = next_chr(); 835 last OUTER if($ch !~ /[0-9a-fA-F]/); 836 $u .= $ch; 837 } 838 839 # U+D800 - U+DBFF 840 if ($u =~ /^[dD][89abAB][0-9a-fA-F]{2}/) { # UTF-16 high surrogate? 841 $utf16 = $u; 842 } 843 # U+DC00 - U+DFFF 844 elsif ($u =~ /^[dD][c-fC-F][0-9a-fA-F]{2}/) { # UTF-16 low surrogate? 845 unless (defined $utf16) { 846 decode_error("missing high surrogate character in surrogate pair"); 847 } 848 $is_utf8 = 1; 849 $s .= JSON_PP_decode_surrogates($utf16, $u) || next; 850 $utf16 = undef; 851 } 852 else { 853 if (defined $utf16) { 854 decode_error("surrogate pair expected"); 855 } 856 857 if ( ( my $hex = hex( $u ) ) > 127 ) { 858 $is_utf8 = 1; 859 $s .= JSON_PP_decode_unicode($u) || next; 860 } 861 else { 862 $s .= chr $hex; 863 } 864 } 865 866 } 867 else{ 868 unless ($loose) { 869 $at -= 2; 870 decode_error('illegal backslash escape sequence in string'); 871 } 872 $s .= $ch; 873 } 874 } 875 else{ 876 877 if ( ord $ch > 127 ) { 878 unless( $ch = is_valid_utf8($ch) ) { 879 $at -= 1; 880 decode_error("malformed UTF-8 character in JSON string"); 881 } 882 else { 883 $at += $utf8_len - 1; 884 } 885 886 $is_utf8 = 1; 887 } 888 889 if (!$loose) { 890 if ($ch =~ /[\x00-\x1f\x22\x5c]/) { # '/' ok 891 if (!$relaxed or $ch ne "\t") { 892 $at--; 893 decode_error('invalid character encountered while parsing JSON string'); 894 } 895 } 896 } 897 898 $s .= $ch; 899 } 900 } 901 } 902 903 decode_error("unexpected end of string while parsing JSON string"); 904 } 905 906 907 sub white { 908 while( defined $ch ){ 909 if($ch eq '' or $ch =~ /\A[ \t\r\n]\z/){ 910 next_chr(); 911 } 912 elsif($relaxed and $ch eq '/'){ 913 next_chr(); 914 if(defined $ch and $ch eq '/'){ 915 1 while(defined(next_chr()) and $ch ne "\n" and $ch ne "\r"); 916 } 917 elsif(defined $ch and $ch eq '*'){ 918 next_chr(); 919 while(1){ 920 if(defined $ch){ 921 if($ch eq '*'){ 922 if(defined(next_chr()) and $ch eq '/'){ 923 next_chr(); 924 last; 925 } 926 } 927 else{ 928 next_chr(); 929 } 930 } 931 else{ 932 decode_error("Unterminated comment"); 933 } 934 } 935 next; 936 } 937 else{ 938 $at--; 939 decode_error("malformed JSON string, neither array, object, number, string or atom"); 940 } 941 } 942 else{ 943 if ($relaxed and $ch eq '#') { # correctly? 944 pos($text) = $at; 945 $text =~ /\G([^\n]*(?:\r\n|\r|\n|$))/g; 946 $at = pos($text); 947 next_chr; 948 next; 949 } 950 951 last; 952 } 953 } 954 } 955 956 957 sub array { 958 my $a = $_[0] || []; # you can use this code to use another array ref object. 959 960 decode_error('json text or perl structure exceeds maximum nesting level (max_depth set too low?)') 961 if (++$depth > $max_depth); 962 963 next_chr(); 964 white(); 965 966 if(defined $ch and $ch eq ']'){ 967 --$depth; 968 next_chr(); 969 return $a; 970 } 971 else { 972 while(defined($ch)){ 973 push @$a, value(); 974 975 white(); 976 977 if (!defined $ch) { 978 last; 979 } 980 981 if($ch eq ']'){ 982 --$depth; 983 next_chr(); 984 return $a; 985 } 986 987 if($ch ne ','){ 988 last; 989 } 990 991 next_chr(); 992 white(); 993 994 if ($relaxed and $ch eq ']') { 995 --$depth; 996 next_chr(); 997 return $a; 998 } 999 1000 } 1001 } 1002 1003 $at-- if defined $ch and $ch ne ''; 1004 decode_error(", or ] expected while parsing array"); 1005 } 1006 1007 sub tag { 1008 decode_error('malformed JSON string, neither array, object, number, string or atom') unless $allow_tags; 1009 1010 next_chr(); 1011 white(); 1012 1013 my $tag = value(); 1014 return unless defined $tag; 1015 decode_error('malformed JSON string, (tag) must be a string') if ref $tag; 1016 1017 white(); 1018 1019 if (!defined $ch or $ch ne ')') { 1020 decode_error(') expected after tag'); 1021 } 1022 1023 next_chr(); 1024 white(); 1025 1026 my $val = value(); 1027 return unless defined $val; 1028 decode_error('malformed JSON string, tag value must be an array') unless ref $val eq 'ARRAY'; 1029 1030 if (!eval { $tag->can('THAW') }) { 1031 decode_error('cannot decode perl-object (package does not exist)') if $@; 1032 decode_error('cannot decode perl-object (package does not have a THAW method)'); 1033 } 1034 $tag->THAW('JSON', @$val); 1035 } 1036 1037 sub object { 1038 my $o = $_[0] || {}; # you can use this code to use another hash ref object. 1039 my $k; 1040 1041 decode_error('json text or perl structure exceeds maximum nesting level (max_depth set too low?)') 1042 if (++$depth > $max_depth); 1043 next_chr(); 1044 white(); 1045 1046 if(defined $ch and $ch eq '}'){ 1047 --$depth; 1048 next_chr(); 1049 if ($F_HOOK) { 1050 return _json_object_hook($o); 1051 } 1052 return $o; 1053 } 1054 else { 1055 while (defined $ch) { 1056 $k = ($allow_barekey and $ch ne '"' and $ch ne "'") ? bareKey() : string(); 1057 white(); 1058 1059 if(!defined $ch or $ch ne ':'){ 1060 $at--; 1061 decode_error("':' expected"); 1062 } 1063 1064 next_chr(); 1065 $o->{$k} = value(); 1066 white(); 1067 1068 last if (!defined $ch); 1069 1070 if($ch eq '}'){ 1071 --$depth; 1072 next_chr(); 1073 if ($F_HOOK) { 1074 return _json_object_hook($o); 1075 } 1076 return $o; 1077 } 1078 1079 if($ch ne ','){ 1080 last; 1081 } 1082 1083 next_chr(); 1084 white(); 1085 1086 if ($relaxed and $ch eq '}') { 1087 --$depth; 1088 next_chr(); 1089 if ($F_HOOK) { 1090 return _json_object_hook($o); 1091 } 1092 return $o; 1093 } 1094 1095 } 1096 1097 } 1098 1099 $at-- if defined $ch and $ch ne ''; 1100 decode_error(", or } expected while parsing object/hash"); 1101 } 1102 1103 1104 sub bareKey { # doesn't strictly follow Standard ECMA-262 3rd Edition 1105 my $key; 1106 while($ch =~ /[^\x00-\x23\x25-\x2F\x3A-\x40\x5B-\x5E\x60\x7B-\x7F]/){ 1107 $key .= $ch; 1108 next_chr(); 1109 } 1110 return $key; 1111 } 1112 1113 1114 sub word { 1115 my $word = substr($text,$at-1,4); 1116 1117 if($word eq 'true'){ 1118 $at += 3; 1119 next_chr; 1120 return defined $alt_true ? $alt_true : $JSON::PP::true; 1121 } 1122 elsif($word eq 'null'){ 1123 $at += 3; 1124 next_chr; 1125 return undef; 1126 } 1127 elsif($word eq 'fals'){ 1128 $at += 3; 1129 if(substr($text,$at,1) eq 'e'){ 1130 $at++; 1131 next_chr; 1132 return defined $alt_false ? $alt_false : $JSON::PP::false; 1133 } 1134 } 1135 1136 $at--; # for decode_error report 1137 1138 decode_error("'null' expected") if ($word =~ /^n/); 1139 decode_error("'true' expected") if ($word =~ /^t/); 1140 decode_error("'false' expected") if ($word =~ /^f/); 1141 decode_error("malformed JSON string, neither array, object, number, string or atom"); 1142 } 1143 1144 1145 sub number { 1146 my $n = ''; 1147 my $v; 1148 my $is_dec; 1149 my $is_exp; 1150 1151 if($ch eq '-'){ 1152 $n = '-'; 1153 next_chr; 1154 if (!defined $ch or $ch !~ /\d/) { 1155 decode_error("malformed number (no digits after initial minus)"); 1156 } 1157 } 1158 1159 # According to RFC4627, hex or oct digits are invalid. 1160 if($ch eq '0'){ 1161 my $peek = substr($text,$at,1); 1162 if($peek =~ /^[0-9a-dfA-DF]/){ # e may be valid (exponential) 1163 decode_error("malformed number (leading zero must not be followed by another digit)"); 1164 } 1165 $n .= $ch; 1166 next_chr; 1167 } 1168 1169 while(defined $ch and $ch =~ /\d/){ 1170 $n .= $ch; 1171 next_chr; 1172 } 1173 1174 if(defined $ch and $ch eq '.'){ 1175 $n .= '.'; 1176 $is_dec = 1; 1177 1178 next_chr; 1179 if (!defined $ch or $ch !~ /\d/) { 1180 decode_error("malformed number (no digits after decimal point)"); 1181 } 1182 else { 1183 $n .= $ch; 1184 } 1185 1186 while(defined(next_chr) and $ch =~ /\d/){ 1187 $n .= $ch; 1188 } 1189 } 1190 1191 if(defined $ch and ($ch eq 'e' or $ch eq 'E')){ 1192 $n .= $ch; 1193 $is_exp = 1; 1194 next_chr; 1195 1196 if(defined($ch) and ($ch eq '+' or $ch eq '-')){ 1197 $n .= $ch; 1198 next_chr; 1199 if (!defined $ch or $ch =~ /\D/) { 1200 decode_error("malformed number (no digits after exp sign)"); 1201 } 1202 $n .= $ch; 1203 } 1204 elsif(defined($ch) and $ch =~ /\d/){ 1205 $n .= $ch; 1206 } 1207 else { 1208 decode_error("malformed number (no digits after exp sign)"); 1209 } 1210 1211 while(defined(next_chr) and $ch =~ /\d/){ 1212 $n .= $ch; 1213 } 1214 1215 } 1216 1217 $v .= $n; 1218 1219 if ($is_dec or $is_exp) { 1220 if ($allow_bignum) { 1221 require Math::BigFloat; 1222 return Math::BigFloat->new($v); 1223 } 1224 } else { 1225 if (length $v > $max_intsize) { 1226 if ($allow_bignum) { # from Adam Sussman 1227 require Math::BigInt; 1228 return Math::BigInt->new($v); 1229 } 1230 else { 1231 return "$v"; 1232 } 1233 } 1234 } 1235 1236 return $is_dec ? $v/1.0 : 0+$v; 1237 } 1238 1239 1240 sub is_valid_utf8 { 1241 1242 $utf8_len = $_[0] =~ /[\x00-\x7F]/ ? 1 1243 : $_[0] =~ /[\xC2-\xDF]/ ? 2 1244 : $_[0] =~ /[\xE0-\xEF]/ ? 3 1245 : $_[0] =~ /[\xF0-\xF4]/ ? 4 1246 : 0 1247 ; 1248 1249 return unless $utf8_len; 1250 1251 my $is_valid_utf8 = substr($text, $at - 1, $utf8_len); 1252 1253 return ( $is_valid_utf8 =~ /^(?: 1254 [\x00-\x7F] 1255 |[\xC2-\xDF][\x80-\xBF] 1256 |[\xE0][\xA0-\xBF][\x80-\xBF] 1257 |[\xE1-\xEC][\x80-\xBF][\x80-\xBF] 1258 |[\xED][\x80-\x9F][\x80-\xBF] 1259 |[\xEE-\xEF][\x80-\xBF][\x80-\xBF] 1260 |[\xF0][\x90-\xBF][\x80-\xBF][\x80-\xBF] 1261 |[\xF1-\xF3][\x80-\xBF][\x80-\xBF][\x80-\xBF] 1262 |[\xF4][\x80-\x8F][\x80-\xBF][\x80-\xBF] 1263 )$/x ) ? $is_valid_utf8 : ''; 1264 } 1265 1266 1267 sub decode_error { 1268 my $error = shift; 1269 my $no_rep = shift; 1270 my $str = defined $text ? substr($text, $at) : ''; 1271 my $mess = ''; 1272 my $type = 'U*'; 1273 1274 if ( OLD_PERL ) { 1275 my $type = $] < 5.006 ? 'C*' 1276 : utf8::is_utf8( $str ) ? 'U*' # 5.6 1277 : 'C*' 1278 ; 1279 } 1280 1281 for my $c ( unpack( $type, $str ) ) { # emulate pv_uni_display() ? 1282 $mess .= $c == 0x07 ? '\a' 1283 : $c == 0x09 ? '\t' 1284 : $c == 0x0a ? '\n' 1285 : $c == 0x0d ? '\r' 1286 : $c == 0x0c ? '\f' 1287 : $c < 0x20 ? sprintf('\x{%x}', $c) 1288 : $c == 0x5c ? '\\\\' 1289 : $c < 0x80 ? chr($c) 1290 : sprintf('\x{%x}', $c) 1291 ; 1292 if ( length $mess >= 20 ) { 1293 $mess .= '...'; 1294 last; 1295 } 1296 } 1297 1298 unless ( length $mess ) { 1299 $mess = '(end of string)'; 1300 } 1301 1302 Carp::croak ( 1303 $no_rep ? "$error" : "$error, at character offset $at (before \"$mess\")" 1304 ); 1305 1306 } 1307 1308 1309 sub _json_object_hook { 1310 my $o = $_[0]; 1311 my @ks = keys %{$o}; 1312 1313 if ( $cb_sk_object and @ks == 1 and exists $cb_sk_object->{ $ks[0] } and ref $cb_sk_object->{ $ks[0] } ) { 1314 my @val = $cb_sk_object->{ $ks[0] }->( $o->{$ks[0]} ); 1315 if (@val == 0) { 1316 return $o; 1317 } 1318 elsif (@val == 1) { 1319 return $val[0]; 1320 } 1321 else { 1322 Carp::croak("filter_json_single_key_object callbacks must not return more than one scalar"); 1323 } 1324 } 1325 1326 my @val = $cb_object->($o) if ($cb_object); 1327 if (@val == 0) { 1328 return $o; 1329 } 1330 elsif (@val == 1) { 1331 return $val[0]; 1332 } 1333 else { 1334 Carp::croak("filter_json_object callbacks must not return more than one scalar"); 1335 } 1336 } 1337 1338 1339 sub PP_decode_box { 1340 { 1341 text => $text, 1342 at => $at, 1343 ch => $ch, 1344 len => $len, 1345 depth => $depth, 1346 encoding => $encoding, 1347 is_valid_utf8 => $is_valid_utf8, 1348 }; 1349 } 1350 1351} # PARSE 1352 1353 1354sub _decode_surrogates { # from perlunicode 1355 my $uni = 0x10000 + (hex($_[0]) - 0xD800) * 0x400 + (hex($_[1]) - 0xDC00); 1356 my $un = pack('U*', $uni); 1357 utf8::encode( $un ); 1358 return $un; 1359} 1360 1361 1362sub _decode_unicode { 1363 my $un = pack('U', hex shift); 1364 utf8::encode( $un ); 1365 return $un; 1366} 1367 1368# 1369# Setup for various Perl versions (the code from JSON::PP58) 1370# 1371 1372BEGIN { 1373 1374 unless ( defined &utf8::is_utf8 ) { 1375 require Encode; 1376 *utf8::is_utf8 = *Encode::is_utf8; 1377 } 1378 1379 if ( !OLD_PERL ) { 1380 *JSON::PP::JSON_PP_encode_ascii = \&_encode_ascii; 1381 *JSON::PP::JSON_PP_encode_latin1 = \&_encode_latin1; 1382 *JSON::PP::JSON_PP_decode_surrogates = \&_decode_surrogates; 1383 *JSON::PP::JSON_PP_decode_unicode = \&_decode_unicode; 1384 1385 if ($] < 5.008003) { # join() in 5.8.0 - 5.8.2 is broken. 1386 package JSON::PP; 1387 require subs; 1388 subs->import('join'); 1389 eval q| 1390 sub join { 1391 return '' if (@_ < 2); 1392 my $j = shift; 1393 my $str = shift; 1394 for (@_) { $str .= $j . $_; } 1395 return $str; 1396 } 1397 |; 1398 } 1399 } 1400 1401 1402 sub JSON::PP::incr_parse { 1403 local $Carp::CarpLevel = 1; 1404 ( $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new )->incr_parse( @_ ); 1405 } 1406 1407 1408 sub JSON::PP::incr_skip { 1409 ( $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new )->incr_skip; 1410 } 1411 1412 1413 sub JSON::PP::incr_reset { 1414 ( $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new )->incr_reset; 1415 } 1416 1417 eval q{ 1418 sub JSON::PP::incr_text : lvalue { 1419 $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new; 1420 1421 if ( $_[0]->{_incr_parser}->{incr_pos} ) { 1422 Carp::croak("incr_text cannot be called when the incremental parser already started parsing"); 1423 } 1424 $_[0]->{_incr_parser}->{incr_text}; 1425 } 1426 } if ( $] >= 5.006 ); 1427 1428} # Setup for various Perl versions (the code from JSON::PP58) 1429 1430 1431############################### 1432# Utilities 1433# 1434 1435BEGIN { 1436 eval 'require Scalar::Util'; 1437 unless($@){ 1438 *JSON::PP::blessed = \&Scalar::Util::blessed; 1439 *JSON::PP::reftype = \&Scalar::Util::reftype; 1440 *JSON::PP::refaddr = \&Scalar::Util::refaddr; 1441 } 1442 else{ # This code is from Scalar::Util. 1443 # warn $@; 1444 eval 'sub UNIVERSAL::a_sub_not_likely_to_be_here { ref($_[0]) }'; 1445 *JSON::PP::blessed = sub { 1446 local($@, $SIG{__DIE__}, $SIG{__WARN__}); 1447 ref($_[0]) ? eval { $_[0]->a_sub_not_likely_to_be_here } : undef; 1448 }; 1449 require B; 1450 my %tmap = qw( 1451 B::NULL SCALAR 1452 B::HV HASH 1453 B::AV ARRAY 1454 B::CV CODE 1455 B::IO IO 1456 B::GV GLOB 1457 B::REGEXP REGEXP 1458 ); 1459 *JSON::PP::reftype = sub { 1460 my $r = shift; 1461 1462 return undef unless length(ref($r)); 1463 1464 my $t = ref(B::svref_2object($r)); 1465 1466 return 1467 exists $tmap{$t} ? $tmap{$t} 1468 : length(ref($$r)) ? 'REF' 1469 : 'SCALAR'; 1470 }; 1471 *JSON::PP::refaddr = sub { 1472 return undef unless length(ref($_[0])); 1473 1474 my $addr; 1475 if(defined(my $pkg = blessed($_[0]))) { 1476 $addr .= bless $_[0], 'Scalar::Util::Fake'; 1477 bless $_[0], $pkg; 1478 } 1479 else { 1480 $addr .= $_[0] 1481 } 1482 1483 $addr =~ /0x(\w+)/; 1484 local $^W; 1485 #no warnings 'portable'; 1486 hex($1); 1487 } 1488 } 1489} 1490 1491 1492# shamelessly copied and modified from JSON::XS code. 1493 1494$JSON::PP::true = do { bless \(my $dummy = 1), "JSON::PP::Boolean" }; 1495$JSON::PP::false = do { bless \(my $dummy = 0), "JSON::PP::Boolean" }; 1496 1497sub is_bool { blessed $_[0] and ( $_[0]->isa("JSON::PP::Boolean") or $_[0]->isa("Types::Serialiser::BooleanBase") or $_[0]->isa("JSON::XS::Boolean") ); } 1498 1499sub true { $JSON::PP::true } 1500sub false { $JSON::PP::false } 1501sub null { undef; } 1502 1503############################### 1504 1505package JSON::PP::IncrParser; 1506 1507use strict; 1508 1509use constant INCR_M_WS => 0; # initial whitespace skipping 1510use constant INCR_M_STR => 1; # inside string 1511use constant INCR_M_BS => 2; # inside backslash 1512use constant INCR_M_JSON => 3; # outside anything, count nesting 1513use constant INCR_M_C0 => 4; 1514use constant INCR_M_C1 => 5; 1515use constant INCR_M_TFN => 6; 1516use constant INCR_M_NUM => 7; 1517 1518$JSON::PP::IncrParser::VERSION = '1.01'; 1519 1520sub new { 1521 my ( $class ) = @_; 1522 1523 bless { 1524 incr_nest => 0, 1525 incr_text => undef, 1526 incr_pos => 0, 1527 incr_mode => 0, 1528 }, $class; 1529} 1530 1531 1532sub incr_parse { 1533 my ( $self, $coder, $text ) = @_; 1534 1535 $self->{incr_text} = '' unless ( defined $self->{incr_text} ); 1536 1537 if ( defined $text ) { 1538 if ( utf8::is_utf8( $text ) and !utf8::is_utf8( $self->{incr_text} ) ) { 1539 utf8::upgrade( $self->{incr_text} ) ; 1540 utf8::decode( $self->{incr_text} ) ; 1541 } 1542 $self->{incr_text} .= $text; 1543 } 1544 1545 if ( defined wantarray ) { 1546 my $max_size = $coder->get_max_size; 1547 my $p = $self->{incr_pos}; 1548 my @ret; 1549 { 1550 do { 1551 unless ( $self->{incr_nest} <= 0 and $self->{incr_mode} == INCR_M_JSON ) { 1552 $self->_incr_parse( $coder ); 1553 1554 if ( $max_size and $self->{incr_pos} > $max_size ) { 1555 Carp::croak("attempted decode of JSON text of $self->{incr_pos} bytes size, but max_size is set to $max_size"); 1556 } 1557 unless ( $self->{incr_nest} <= 0 and $self->{incr_mode} == INCR_M_JSON ) { 1558 # as an optimisation, do not accumulate white space in the incr buffer 1559 if ( $self->{incr_mode} == INCR_M_WS and $self->{incr_pos} ) { 1560 $self->{incr_pos} = 0; 1561 $self->{incr_text} = ''; 1562 } 1563 last; 1564 } 1565 } 1566 1567 my ($obj, $offset) = $coder->PP_decode_json( $self->{incr_text}, 0x00000001 ); 1568 push @ret, $obj; 1569 use bytes; 1570 $self->{incr_text} = substr( $self->{incr_text}, $offset || 0 ); 1571 $self->{incr_pos} = 0; 1572 $self->{incr_nest} = 0; 1573 $self->{incr_mode} = 0; 1574 last unless wantarray; 1575 } while ( wantarray ); 1576 } 1577 1578 if ( wantarray ) { 1579 return @ret; 1580 } 1581 else { # in scalar context 1582 return defined $ret[0] ? $ret[0] : undef; 1583 } 1584 } 1585} 1586 1587 1588sub _incr_parse { 1589 my ($self, $coder) = @_; 1590 my $text = $self->{incr_text}; 1591 my $len = length $text; 1592 my $p = $self->{incr_pos}; 1593 1594INCR_PARSE: 1595 while ( $len > $p ) { 1596 my $s = substr( $text, $p, 1 ); 1597 last INCR_PARSE unless defined $s; 1598 my $mode = $self->{incr_mode}; 1599 1600 if ( $mode == INCR_M_WS ) { 1601 while ( $len > $p ) { 1602 $s = substr( $text, $p, 1 ); 1603 last INCR_PARSE unless defined $s; 1604 if ( ord($s) > 0x20 ) { 1605 if ( $s eq '#' ) { 1606 $self->{incr_mode} = INCR_M_C0; 1607 redo INCR_PARSE; 1608 } else { 1609 $self->{incr_mode} = INCR_M_JSON; 1610 redo INCR_PARSE; 1611 } 1612 } 1613 $p++; 1614 } 1615 } elsif ( $mode == INCR_M_BS ) { 1616 $p++; 1617 $self->{incr_mode} = INCR_M_STR; 1618 redo INCR_PARSE; 1619 } elsif ( $mode == INCR_M_C0 or $mode == INCR_M_C1 ) { 1620 while ( $len > $p ) { 1621 $s = substr( $text, $p, 1 ); 1622 last INCR_PARSE unless defined $s; 1623 if ( $s eq "\n" ) { 1624 $self->{incr_mode} = $self->{incr_mode} == INCR_M_C0 ? INCR_M_WS : INCR_M_JSON; 1625 last; 1626 } 1627 $p++; 1628 } 1629 next; 1630 } elsif ( $mode == INCR_M_TFN ) { 1631 while ( $len > $p ) { 1632 $s = substr( $text, $p++, 1 ); 1633 next if defined $s and $s =~ /[rueals]/; 1634 last; 1635 } 1636 $p--; 1637 $self->{incr_mode} = INCR_M_JSON; 1638 1639 last INCR_PARSE unless $self->{incr_nest}; 1640 redo INCR_PARSE; 1641 } elsif ( $mode == INCR_M_NUM ) { 1642 while ( $len > $p ) { 1643 $s = substr( $text, $p++, 1 ); 1644 next if defined $s and $s =~ /[0-9eE.+\-]/; 1645 last; 1646 } 1647 $p--; 1648 $self->{incr_mode} = INCR_M_JSON; 1649 1650 last INCR_PARSE unless $self->{incr_nest}; 1651 redo INCR_PARSE; 1652 } elsif ( $mode == INCR_M_STR ) { 1653 while ( $len > $p ) { 1654 $s = substr( $text, $p, 1 ); 1655 last INCR_PARSE unless defined $s; 1656 if ( $s eq '"' ) { 1657 $p++; 1658 $self->{incr_mode} = INCR_M_JSON; 1659 1660 last INCR_PARSE unless $self->{incr_nest}; 1661 redo INCR_PARSE; 1662 } 1663 elsif ( $s eq '\\' ) { 1664 $p++; 1665 if ( !defined substr($text, $p, 1) ) { 1666 $self->{incr_mode} = INCR_M_BS; 1667 last INCR_PARSE; 1668 } 1669 } 1670 $p++; 1671 } 1672 } elsif ( $mode == INCR_M_JSON ) { 1673 while ( $len > $p ) { 1674 $s = substr( $text, $p++, 1 ); 1675 if ( $s eq "\x00" ) { 1676 $p--; 1677 last INCR_PARSE; 1678 } elsif ( $s eq "\x09" or $s eq "\x0a" or $s eq "\x0d" or $s eq "\x20" ) { 1679 if ( !$self->{incr_nest} ) { 1680 $p--; # do not eat the whitespace, let the next round do it 1681 last INCR_PARSE; 1682 } 1683 next; 1684 } elsif ( $s eq 't' or $s eq 'f' or $s eq 'n' ) { 1685 $self->{incr_mode} = INCR_M_TFN; 1686 redo INCR_PARSE; 1687 } elsif ( $s =~ /^[0-9\-]$/ ) { 1688 $self->{incr_mode} = INCR_M_NUM; 1689 redo INCR_PARSE; 1690 } elsif ( $s eq '"' ) { 1691 $self->{incr_mode} = INCR_M_STR; 1692 redo INCR_PARSE; 1693 } elsif ( $s eq '[' or $s eq '{' ) { 1694 if ( ++$self->{incr_nest} > $coder->get_max_depth ) { 1695 Carp::croak('json text or perl structure exceeds maximum nesting level (max_depth set too low?)'); 1696 } 1697 next; 1698 } elsif ( $s eq ']' or $s eq '}' ) { 1699 if ( --$self->{incr_nest} <= 0 ) { 1700 last INCR_PARSE; 1701 } 1702 } elsif ( $s eq '#' ) { 1703 $self->{incr_mode} = INCR_M_C1; 1704 redo INCR_PARSE; 1705 } 1706 } 1707 } 1708 } 1709 1710 $self->{incr_pos} = $p; 1711 $self->{incr_parsing} = $p ? 1 : 0; # for backward compatibility 1712} 1713 1714 1715sub incr_text { 1716 if ( $_[0]->{incr_pos} ) { 1717 Carp::croak("incr_text cannot be called when the incremental parser already started parsing"); 1718 } 1719 $_[0]->{incr_text}; 1720} 1721 1722 1723sub incr_skip { 1724 my $self = shift; 1725 $self->{incr_text} = substr( $self->{incr_text}, $self->{incr_pos} ); 1726 $self->{incr_pos} = 0; 1727 $self->{incr_mode} = 0; 1728 $self->{incr_nest} = 0; 1729} 1730 1731 1732sub incr_reset { 1733 my $self = shift; 1734 $self->{incr_text} = undef; 1735 $self->{incr_pos} = 0; 1736 $self->{incr_mode} = 0; 1737 $self->{incr_nest} = 0; 1738} 1739 1740############################### 1741 1742 17431; 1744__END__ 1745=pod 1746 1747=head1 NAME 1748 1749JSON::PP - JSON::XS compatible pure-Perl module. 1750 1751=head1 SYNOPSIS 1752 1753 use JSON::PP; 1754 1755 # exported functions, they croak on error 1756 # and expect/generate UTF-8 1757 1758 $utf8_encoded_json_text = encode_json $perl_hash_or_arrayref; 1759 $perl_hash_or_arrayref = decode_json $utf8_encoded_json_text; 1760 1761 # OO-interface 1762 1763 $json = JSON::PP->new->ascii->pretty->allow_nonref; 1764 1765 $pretty_printed_json_text = $json->encode( $perl_scalar ); 1766 $perl_scalar = $json->decode( $json_text ); 1767 1768 # Note that JSON version 2.0 and above will automatically use 1769 # JSON::XS or JSON::PP, so you should be able to just: 1770 1771 use JSON; 1772 1773 1774=head1 VERSION 1775 1776 4.04 1777 1778=head1 DESCRIPTION 1779 1780JSON::PP is a pure perl JSON decoder/encoder, and (almost) compatible to much 1781faster L<JSON::XS> written by Marc Lehmann in C. JSON::PP works as 1782a fallback module when you use L<JSON> module without having 1783installed JSON::XS. 1784 1785Because of this fallback feature of JSON.pm, JSON::PP tries not to 1786be more JavaScript-friendly than JSON::XS (i.e. not to escape extra 1787characters such as U+2028 and U+2029, etc), 1788in order for you not to lose such JavaScript-friendliness silently 1789when you use JSON.pm and install JSON::XS for speed or by accident. 1790If you need JavaScript-friendly RFC7159-compliant pure perl module, 1791try L<JSON::Tiny>, which is derived from L<Mojolicious> web 1792framework and is also smaller and faster than JSON::PP. 1793 1794JSON::PP has been in the Perl core since Perl 5.14, mainly for 1795CPAN toolchain modules to parse META.json. 1796 1797=head1 FUNCTIONAL INTERFACE 1798 1799This section is taken from JSON::XS almost verbatim. C<encode_json> 1800and C<decode_json> are exported by default. 1801 1802=head2 encode_json 1803 1804 $json_text = encode_json $perl_scalar 1805 1806Converts the given Perl data structure to a UTF-8 encoded, binary string 1807(that is, the string contains octets only). Croaks on error. 1808 1809This function call is functionally identical to: 1810 1811 $json_text = JSON::PP->new->utf8->encode($perl_scalar) 1812 1813Except being faster. 1814 1815=head2 decode_json 1816 1817 $perl_scalar = decode_json $json_text 1818 1819The opposite of C<encode_json>: expects an UTF-8 (binary) string and tries 1820to parse that as an UTF-8 encoded JSON text, returning the resulting 1821reference. Croaks on error. 1822 1823This function call is functionally identical to: 1824 1825 $perl_scalar = JSON::PP->new->utf8->decode($json_text) 1826 1827Except being faster. 1828 1829=head2 JSON::PP::is_bool 1830 1831 $is_boolean = JSON::PP::is_bool($scalar) 1832 1833Returns true if the passed scalar represents either JSON::PP::true or 1834JSON::PP::false, two constants that act like C<1> and C<0> respectively 1835and are also used to represent JSON C<true> and C<false> in Perl strings. 1836 1837See L<MAPPING>, below, for more information on how JSON values are mapped to 1838Perl. 1839 1840=head1 OBJECT-ORIENTED INTERFACE 1841 1842This section is also taken from JSON::XS. 1843 1844The object oriented interface lets you configure your own encoding or 1845decoding style, within the limits of supported formats. 1846 1847=head2 new 1848 1849 $json = JSON::PP->new 1850 1851Creates a new JSON::PP object that can be used to de/encode JSON 1852strings. All boolean flags described below are by default I<disabled> 1853(with the exception of C<allow_nonref>, which defaults to I<enabled> since 1854version C<4.0>). 1855 1856The mutators for flags all return the JSON::PP object again and thus calls can 1857be chained: 1858 1859 my $json = JSON::PP->new->utf8->space_after->encode({a => [1,2]}) 1860 => {"a": [1, 2]} 1861 1862=head2 ascii 1863 1864 $json = $json->ascii([$enable]) 1865 1866 $enabled = $json->get_ascii 1867 1868If C<$enable> is true (or missing), then the C<encode> method will not 1869generate characters outside the code range C<0..127> (which is ASCII). Any 1870Unicode characters outside that range will be escaped using either a 1871single \uXXXX (BMP characters) or a double \uHHHH\uLLLLL escape sequence, 1872as per RFC4627. The resulting encoded JSON text can be treated as a native 1873Unicode string, an ascii-encoded, latin1-encoded or UTF-8 encoded string, 1874or any other superset of ASCII. 1875 1876If C<$enable> is false, then the C<encode> method will not escape Unicode 1877characters unless required by the JSON syntax or other flags. This results 1878in a faster and more compact format. 1879 1880See also the section I<ENCODING/CODESET FLAG NOTES> later in this document. 1881 1882The main use for this flag is to produce JSON texts that can be 1883transmitted over a 7-bit channel, as the encoded JSON texts will not 1884contain any 8 bit characters. 1885 1886 JSON::PP->new->ascii(1)->encode([chr 0x10401]) 1887 => ["\ud801\udc01"] 1888 1889=head2 latin1 1890 1891 $json = $json->latin1([$enable]) 1892 1893 $enabled = $json->get_latin1 1894 1895If C<$enable> is true (or missing), then the C<encode> method will encode 1896the resulting JSON text as latin1 (or iso-8859-1), escaping any characters 1897outside the code range C<0..255>. The resulting string can be treated as a 1898latin1-encoded JSON text or a native Unicode string. The C<decode> method 1899will not be affected in any way by this flag, as C<decode> by default 1900expects Unicode, which is a strict superset of latin1. 1901 1902If C<$enable> is false, then the C<encode> method will not escape Unicode 1903characters unless required by the JSON syntax or other flags. 1904 1905See also the section I<ENCODING/CODESET FLAG NOTES> later in this document. 1906 1907The main use for this flag is efficiently encoding binary data as JSON 1908text, as most octets will not be escaped, resulting in a smaller encoded 1909size. The disadvantage is that the resulting JSON text is encoded 1910in latin1 (and must correctly be treated as such when storing and 1911transferring), a rare encoding for JSON. It is therefore most useful when 1912you want to store data structures known to contain binary data efficiently 1913in files or databases, not when talking to other JSON encoders/decoders. 1914 1915 JSON::PP->new->latin1->encode (["\x{89}\x{abc}"] 1916 => ["\x{89}\\u0abc"] # (perl syntax, U+abc escaped, U+89 not) 1917 1918=head2 utf8 1919 1920 $json = $json->utf8([$enable]) 1921 1922 $enabled = $json->get_utf8 1923 1924If C<$enable> is true (or missing), then the C<encode> method will encode 1925the JSON result into UTF-8, as required by many protocols, while the 1926C<decode> method expects to be handled an UTF-8-encoded string. Please 1927note that UTF-8-encoded strings do not contain any characters outside the 1928range C<0..255>, they are thus useful for bytewise/binary I/O. In future 1929versions, enabling this option might enable autodetection of the UTF-16 1930and UTF-32 encoding families, as described in RFC4627. 1931 1932If C<$enable> is false, then the C<encode> method will return the JSON 1933string as a (non-encoded) Unicode string, while C<decode> expects thus a 1934Unicode string. Any decoding or encoding (e.g. to UTF-8 or UTF-16) needs 1935to be done yourself, e.g. using the Encode module. 1936 1937See also the section I<ENCODING/CODESET FLAG NOTES> later in this document. 1938 1939Example, output UTF-16BE-encoded JSON: 1940 1941 use Encode; 1942 $jsontext = encode "UTF-16BE", JSON::PP->new->encode ($object); 1943 1944Example, decode UTF-32LE-encoded JSON: 1945 1946 use Encode; 1947 $object = JSON::PP->new->decode (decode "UTF-32LE", $jsontext); 1948 1949=head2 pretty 1950 1951 $json = $json->pretty([$enable]) 1952 1953This enables (or disables) all of the C<indent>, C<space_before> and 1954C<space_after> (and in the future possibly more) flags in one call to 1955generate the most readable (or most compact) form possible. 1956 1957=head2 indent 1958 1959 $json = $json->indent([$enable]) 1960 1961 $enabled = $json->get_indent 1962 1963If C<$enable> is true (or missing), then the C<encode> method will use a multiline 1964format as output, putting every array member or object/hash key-value pair 1965into its own line, indenting them properly. 1966 1967If C<$enable> is false, no newlines or indenting will be produced, and the 1968resulting JSON text is guaranteed not to contain any C<newlines>. 1969 1970This setting has no effect when decoding JSON texts. 1971 1972The default indent space length is three. 1973You can use C<indent_length> to change the length. 1974 1975=head2 space_before 1976 1977 $json = $json->space_before([$enable]) 1978 1979 $enabled = $json->get_space_before 1980 1981If C<$enable> is true (or missing), then the C<encode> method will add an extra 1982optional space before the C<:> separating keys from values in JSON objects. 1983 1984If C<$enable> is false, then the C<encode> method will not add any extra 1985space at those places. 1986 1987This setting has no effect when decoding JSON texts. You will also 1988most likely combine this setting with C<space_after>. 1989 1990Example, space_before enabled, space_after and indent disabled: 1991 1992 {"key" :"value"} 1993 1994=head2 space_after 1995 1996 $json = $json->space_after([$enable]) 1997 1998 $enabled = $json->get_space_after 1999 2000If C<$enable> is true (or missing), then the C<encode> method will add an extra 2001optional space after the C<:> separating keys from values in JSON objects 2002and extra whitespace after the C<,> separating key-value pairs and array 2003members. 2004 2005If C<$enable> is false, then the C<encode> method will not add any extra 2006space at those places. 2007 2008This setting has no effect when decoding JSON texts. 2009 2010Example, space_before and indent disabled, space_after enabled: 2011 2012 {"key": "value"} 2013 2014=head2 relaxed 2015 2016 $json = $json->relaxed([$enable]) 2017 2018 $enabled = $json->get_relaxed 2019 2020If C<$enable> is true (or missing), then C<decode> will accept some 2021extensions to normal JSON syntax (see below). C<encode> will not be 2022affected in anyway. I<Be aware that this option makes you accept invalid 2023JSON texts as if they were valid!>. I suggest only to use this option to 2024parse application-specific files written by humans (configuration files, 2025resource files etc.) 2026 2027If C<$enable> is false (the default), then C<decode> will only accept 2028valid JSON texts. 2029 2030Currently accepted extensions are: 2031 2032=over 4 2033 2034=item * list items can have an end-comma 2035 2036JSON I<separates> array elements and key-value pairs with commas. This 2037can be annoying if you write JSON texts manually and want to be able to 2038quickly append elements, so this extension accepts comma at the end of 2039such items not just between them: 2040 2041 [ 2042 1, 2043 2, <- this comma not normally allowed 2044 ] 2045 { 2046 "k1": "v1", 2047 "k2": "v2", <- this comma not normally allowed 2048 } 2049 2050=item * shell-style '#'-comments 2051 2052Whenever JSON allows whitespace, shell-style comments are additionally 2053allowed. They are terminated by the first carriage-return or line-feed 2054character, after which more white-space and comments are allowed. 2055 2056 [ 2057 1, # this comment not allowed in JSON 2058 # neither this one... 2059 ] 2060 2061=item * C-style multiple-line '/* */'-comments (JSON::PP only) 2062 2063Whenever JSON allows whitespace, C-style multiple-line comments are additionally 2064allowed. Everything between C</*> and C<*/> is a comment, after which 2065more white-space and comments are allowed. 2066 2067 [ 2068 1, /* this comment not allowed in JSON */ 2069 /* neither this one... */ 2070 ] 2071 2072=item * C++-style one-line '//'-comments (JSON::PP only) 2073 2074Whenever JSON allows whitespace, C++-style one-line comments are additionally 2075allowed. They are terminated by the first carriage-return or line-feed 2076character, after which more white-space and comments are allowed. 2077 2078 [ 2079 1, // this comment not allowed in JSON 2080 // neither this one... 2081 ] 2082 2083=item * literal ASCII TAB characters in strings 2084 2085Literal ASCII TAB characters are now allowed in strings (and treated as 2086C<\t>). 2087 2088 [ 2089 "Hello\tWorld", 2090 "Hello<TAB>World", # literal <TAB> would not normally be allowed 2091 ] 2092 2093=back 2094 2095=head2 canonical 2096 2097 $json = $json->canonical([$enable]) 2098 2099 $enabled = $json->get_canonical 2100 2101If C<$enable> is true (or missing), then the C<encode> method will output JSON objects 2102by sorting their keys. This is adding a comparatively high overhead. 2103 2104If C<$enable> is false, then the C<encode> method will output key-value 2105pairs in the order Perl stores them (which will likely change between runs 2106of the same script, and can change even within the same run from 5.18 2107onwards). 2108 2109This option is useful if you want the same data structure to be encoded as 2110the same JSON text (given the same overall settings). If it is disabled, 2111the same hash might be encoded differently even if contains the same data, 2112as key-value pairs have no inherent ordering in Perl. 2113 2114This setting has no effect when decoding JSON texts. 2115 2116This setting has currently no effect on tied hashes. 2117 2118=head2 allow_nonref 2119 2120 $json = $json->allow_nonref([$enable]) 2121 2122 $enabled = $json->get_allow_nonref 2123 2124Unlike other boolean options, this opotion is enabled by default beginning 2125with version C<4.0>. 2126 2127If C<$enable> is true (or missing), then the C<encode> method can convert a 2128non-reference into its corresponding string, number or null JSON value, 2129which is an extension to RFC4627. Likewise, C<decode> will accept those JSON 2130values instead of croaking. 2131 2132If C<$enable> is false, then the C<encode> method will croak if it isn't 2133passed an arrayref or hashref, as JSON texts must either be an object 2134or array. Likewise, C<decode> will croak if given something that is not a 2135JSON object or array. 2136 2137Example, encode a Perl scalar as JSON value without enabled C<allow_nonref>, 2138resulting in an error: 2139 2140 JSON::PP->new->allow_nonref(0)->encode ("Hello, World!") 2141 => hash- or arrayref expected... 2142 2143=head2 allow_unknown 2144 2145 $json = $json->allow_unknown([$enable]) 2146 2147 $enabled = $json->get_allow_unknown 2148 2149If C<$enable> is true (or missing), then C<encode> will I<not> throw an 2150exception when it encounters values it cannot represent in JSON (for 2151example, filehandles) but instead will encode a JSON C<null> value. Note 2152that blessed objects are not included here and are handled separately by 2153c<allow_blessed>. 2154 2155If C<$enable> is false (the default), then C<encode> will throw an 2156exception when it encounters anything it cannot encode as JSON. 2157 2158This option does not affect C<decode> in any way, and it is recommended to 2159leave it off unless you know your communications partner. 2160 2161=head2 allow_blessed 2162 2163 $json = $json->allow_blessed([$enable]) 2164 2165 $enabled = $json->get_allow_blessed 2166 2167See L<OBJECT SERIALISATION> for details. 2168 2169If C<$enable> is true (or missing), then the C<encode> method will not 2170barf when it encounters a blessed reference that it cannot convert 2171otherwise. Instead, a JSON C<null> value is encoded instead of the object. 2172 2173If C<$enable> is false (the default), then C<encode> will throw an 2174exception when it encounters a blessed object that it cannot convert 2175otherwise. 2176 2177This setting has no effect on C<decode>. 2178 2179=head2 convert_blessed 2180 2181 $json = $json->convert_blessed([$enable]) 2182 2183 $enabled = $json->get_convert_blessed 2184 2185See L<OBJECT SERIALISATION> for details. 2186 2187If C<$enable> is true (or missing), then C<encode>, upon encountering a 2188blessed object, will check for the availability of the C<TO_JSON> method 2189on the object's class. If found, it will be called in scalar context and 2190the resulting scalar will be encoded instead of the object. 2191 2192The C<TO_JSON> method may safely call die if it wants. If C<TO_JSON> 2193returns other blessed objects, those will be handled in the same 2194way. C<TO_JSON> must take care of not causing an endless recursion cycle 2195(== crash) in this case. The name of C<TO_JSON> was chosen because other 2196methods called by the Perl core (== not by the user of the object) are 2197usually in upper case letters and to avoid collisions with any C<to_json> 2198function or method. 2199 2200If C<$enable> is false (the default), then C<encode> will not consider 2201this type of conversion. 2202 2203This setting has no effect on C<decode>. 2204 2205=head2 allow_tags 2206 2207 $json = $json->allow_tags([$enable]) 2208 2209 $enabled = $json->get_allow_tags 2210 2211See L<OBJECT SERIALISATION> for details. 2212 2213If C<$enable> is true (or missing), then C<encode>, upon encountering a 2214blessed object, will check for the availability of the C<FREEZE> method on 2215the object's class. If found, it will be used to serialise the object into 2216a nonstandard tagged JSON value (that JSON decoders cannot decode). 2217 2218It also causes C<decode> to parse such tagged JSON values and deserialise 2219them via a call to the C<THAW> method. 2220 2221If C<$enable> is false (the default), then C<encode> will not consider 2222this type of conversion, and tagged JSON values will cause a parse error 2223in C<decode>, as if tags were not part of the grammar. 2224 2225=head2 boolean_values 2226 2227 $json->boolean_values([$false, $true]) 2228 2229 ($false, $true) = $json->get_boolean_values 2230 2231By default, JSON booleans will be decoded as overloaded 2232C<$JSON::PP::false> and C<$JSON::PP::true> objects. 2233 2234With this method you can specify your own boolean values for decoding - 2235on decode, JSON C<false> will be decoded as a copy of C<$false>, and JSON 2236C<true> will be decoded as C<$true> ("copy" here is the same thing as 2237assigning a value to another variable, i.e. C<$copy = $false>). 2238 2239This is useful when you want to pass a decoded data structure directly 2240to other serialisers like YAML, Data::MessagePack and so on. 2241 2242Note that this works only when you C<decode>. You can set incompatible 2243boolean objects (like L<boolean>), but when you C<encode> a data structure 2244with such boolean objects, you still need to enable C<convert_blessed> 2245(and add a C<TO_JSON> method if necessary). 2246 2247Calling this method without any arguments will reset the booleans 2248to their default values. 2249 2250C<get_boolean_values> will return both C<$false> and C<$true> values, or 2251the empty list when they are set to the default. 2252 2253=head2 filter_json_object 2254 2255 $json = $json->filter_json_object([$coderef]) 2256 2257When C<$coderef> is specified, it will be called from C<decode> each 2258time it decodes a JSON object. The only argument is a reference to 2259the newly-created hash. If the code references returns a single scalar 2260(which need not be a reference), this value (or rather a copy of it) is 2261inserted into the deserialised data structure. If it returns an empty 2262list (NOTE: I<not> C<undef>, which is a valid scalar), the original 2263deserialised hash will be inserted. This setting can slow down decoding 2264considerably. 2265 2266When C<$coderef> is omitted or undefined, any existing callback will 2267be removed and C<decode> will not change the deserialised hash in any 2268way. 2269 2270Example, convert all JSON objects into the integer 5: 2271 2272 my $js = JSON::PP->new->filter_json_object(sub { 5 }); 2273 # returns [5] 2274 $js->decode('[{}]'); 2275 # returns 5 2276 $js->decode('{"a":1, "b":2}'); 2277 2278=head2 filter_json_single_key_object 2279 2280 $json = $json->filter_json_single_key_object($key [=> $coderef]) 2281 2282Works remotely similar to C<filter_json_object>, but is only called for 2283JSON objects having a single key named C<$key>. 2284 2285This C<$coderef> is called before the one specified via 2286C<filter_json_object>, if any. It gets passed the single value in the JSON 2287object. If it returns a single value, it will be inserted into the data 2288structure. If it returns nothing (not even C<undef> but the empty list), 2289the callback from C<filter_json_object> will be called next, as if no 2290single-key callback were specified. 2291 2292If C<$coderef> is omitted or undefined, the corresponding callback will be 2293disabled. There can only ever be one callback for a given key. 2294 2295As this callback gets called less often then the C<filter_json_object> 2296one, decoding speed will not usually suffer as much. Therefore, single-key 2297objects make excellent targets to serialise Perl objects into, especially 2298as single-key JSON objects are as close to the type-tagged value concept 2299as JSON gets (it's basically an ID/VALUE tuple). Of course, JSON does not 2300support this in any way, so you need to make sure your data never looks 2301like a serialised Perl hash. 2302 2303Typical names for the single object key are C<__class_whatever__>, or 2304C<$__dollars_are_rarely_used__$> or C<}ugly_brace_placement>, or even 2305things like C<__class_md5sum(classname)__>, to reduce the risk of clashing 2306with real hashes. 2307 2308Example, decode JSON objects of the form C<< { "__widget__" => <id> } >> 2309into the corresponding C<< $WIDGET{<id>} >> object: 2310 2311 # return whatever is in $WIDGET{5}: 2312 JSON::PP 2313 ->new 2314 ->filter_json_single_key_object (__widget__ => sub { 2315 $WIDGET{ $_[0] } 2316 }) 2317 ->decode ('{"__widget__": 5') 2318 2319 # this can be used with a TO_JSON method in some "widget" class 2320 # for serialisation to json: 2321 sub WidgetBase::TO_JSON { 2322 my ($self) = @_; 2323 2324 unless ($self->{id}) { 2325 $self->{id} = ..get..some..id..; 2326 $WIDGET{$self->{id}} = $self; 2327 } 2328 2329 { __widget__ => $self->{id} } 2330 } 2331 2332=head2 shrink 2333 2334 $json = $json->shrink([$enable]) 2335 2336 $enabled = $json->get_shrink 2337 2338If C<$enable> is true (or missing), the string returned by C<encode> will 2339be shrunk (i.e. downgraded if possible). 2340 2341The actual definition of what shrink does might change in future versions, 2342but it will always try to save space at the expense of time. 2343 2344If C<$enable> is false, then JSON::PP does nothing. 2345 2346=head2 max_depth 2347 2348 $json = $json->max_depth([$maximum_nesting_depth]) 2349 2350 $max_depth = $json->get_max_depth 2351 2352Sets the maximum nesting level (default C<512>) accepted while encoding 2353or decoding. If a higher nesting level is detected in JSON text or a Perl 2354data structure, then the encoder and decoder will stop and croak at that 2355point. 2356 2357Nesting level is defined by number of hash- or arrayrefs that the encoder 2358needs to traverse to reach a given point or the number of C<{> or C<[> 2359characters without their matching closing parenthesis crossed to reach a 2360given character in a string. 2361 2362Setting the maximum depth to one disallows any nesting, so that ensures 2363that the object is only a single hash/object or array. 2364 2365If no argument is given, the highest possible setting will be used, which 2366is rarely useful. 2367 2368See L<JSON::XS/SECURITY CONSIDERATIONS> for more info on why this is useful. 2369 2370=head2 max_size 2371 2372 $json = $json->max_size([$maximum_string_size]) 2373 2374 $max_size = $json->get_max_size 2375 2376Set the maximum length a JSON text may have (in bytes) where decoding is 2377being attempted. The default is C<0>, meaning no limit. When C<decode> 2378is called on a string that is longer then this many bytes, it will not 2379attempt to decode the string but throw an exception. This setting has no 2380effect on C<encode> (yet). 2381 2382If no argument is given, the limit check will be deactivated (same as when 2383C<0> is specified). 2384 2385See L<JSON::XS/SECURITY CONSIDERATIONS> for more info on why this is useful. 2386 2387=head2 encode 2388 2389 $json_text = $json->encode($perl_scalar) 2390 2391Converts the given Perl value or data structure to its JSON 2392representation. Croaks on error. 2393 2394=head2 decode 2395 2396 $perl_scalar = $json->decode($json_text) 2397 2398The opposite of C<encode>: expects a JSON text and tries to parse it, 2399returning the resulting simple scalar or reference. Croaks on error. 2400 2401=head2 decode_prefix 2402 2403 ($perl_scalar, $characters) = $json->decode_prefix($json_text) 2404 2405This works like the C<decode> method, but instead of raising an exception 2406when there is trailing garbage after the first JSON object, it will 2407silently stop parsing there and return the number of characters consumed 2408so far. 2409 2410This is useful if your JSON texts are not delimited by an outer protocol 2411and you need to know where the JSON text ends. 2412 2413 JSON::PP->new->decode_prefix ("[1] the tail") 2414 => ([1], 3) 2415 2416=head1 FLAGS FOR JSON::PP ONLY 2417 2418The following flags and properties are for JSON::PP only. If you use 2419any of these, you can't make your application run faster by replacing 2420JSON::PP with JSON::XS. If you need these and also speed boost, 2421you might want to try L<Cpanel::JSON::XS>, a fork of JSON::XS by 2422Reini Urban, which supports some of these (with a different set of 2423incompatibilities). Most of these historical flags are only kept 2424for backward compatibility, and should not be used in a new application. 2425 2426=head2 allow_singlequote 2427 2428 $json = $json->allow_singlequote([$enable]) 2429 $enabled = $json->get_allow_singlequote 2430 2431If C<$enable> is true (or missing), then C<decode> will accept 2432invalid JSON texts that contain strings that begin and end with 2433single quotation marks. C<encode> will not be affected in any way. 2434I<Be aware that this option makes you accept invalid JSON texts 2435as if they were valid!>. I suggest only to use this option to 2436parse application-specific files written by humans (configuration 2437files, resource files etc.) 2438 2439If C<$enable> is false (the default), then C<decode> will only accept 2440valid JSON texts. 2441 2442 $json->allow_singlequote->decode(qq|{"foo":'bar'}|); 2443 $json->allow_singlequote->decode(qq|{'foo':"bar"}|); 2444 $json->allow_singlequote->decode(qq|{'foo':'bar'}|); 2445 2446=head2 allow_barekey 2447 2448 $json = $json->allow_barekey([$enable]) 2449 $enabled = $json->get_allow_barekey 2450 2451If C<$enable> is true (or missing), then C<decode> will accept 2452invalid JSON texts that contain JSON objects whose names don't 2453begin and end with quotation marks. C<encode> will not be affected 2454in any way. I<Be aware that this option makes you accept invalid JSON 2455texts as if they were valid!>. I suggest only to use this option to 2456parse application-specific files written by humans (configuration 2457files, resource files etc.) 2458 2459If C<$enable> is false (the default), then C<decode> will only accept 2460valid JSON texts. 2461 2462 $json->allow_barekey->decode(qq|{foo:"bar"}|); 2463 2464=head2 allow_bignum 2465 2466 $json = $json->allow_bignum([$enable]) 2467 $enabled = $json->get_allow_bignum 2468 2469If C<$enable> is true (or missing), then C<decode> will convert 2470big integers Perl cannot handle as integer into L<Math::BigInt> 2471objects and convert floating numbers into L<Math::BigFloat> 2472objects. C<encode> will convert C<Math::BigInt> and C<Math::BigFloat> 2473objects into JSON numbers. 2474 2475 $json->allow_nonref->allow_bignum; 2476 $bigfloat = $json->decode('2.000000000000000000000000001'); 2477 print $json->encode($bigfloat); 2478 # => 2.000000000000000000000000001 2479 2480See also L<MAPPING>. 2481 2482=head2 loose 2483 2484 $json = $json->loose([$enable]) 2485 $enabled = $json->get_loose 2486 2487If C<$enable> is true (or missing), then C<decode> will accept 2488invalid JSON texts that contain unescaped [\x00-\x1f\x22\x5c] 2489characters. C<encode> will not be affected in any way. 2490I<Be aware that this option makes you accept invalid JSON texts 2491as if they were valid!>. I suggest only to use this option to 2492parse application-specific files written by humans (configuration 2493files, resource files etc.) 2494 2495If C<$enable> is false (the default), then C<decode> will only accept 2496valid JSON texts. 2497 2498 $json->loose->decode(qq|["abc 2499 def"]|); 2500 2501=head2 escape_slash 2502 2503 $json = $json->escape_slash([$enable]) 2504 $enabled = $json->get_escape_slash 2505 2506If C<$enable> is true (or missing), then C<encode> will explicitly 2507escape I<slash> (solidus; C<U+002F>) characters to reduce the risk of 2508XSS (cross site scripting) that may be caused by C<< </script> >> 2509in a JSON text, with the cost of bloating the size of JSON texts. 2510 2511This option may be useful when you embed JSON in HTML, but embedding 2512arbitrary JSON in HTML (by some HTML template toolkit or by string 2513interpolation) is risky in general. You must escape necessary 2514characters in correct order, depending on the context. 2515 2516C<decode> will not be affected in any way. 2517 2518=head2 indent_length 2519 2520 $json = $json->indent_length($number_of_spaces) 2521 $length = $json->get_indent_length 2522 2523This option is only useful when you also enable C<indent> or C<pretty>. 2524 2525JSON::XS indents with three spaces when you C<encode> (if requested 2526by C<indent> or C<pretty>), and the number cannot be changed. 2527JSON::PP allows you to change/get the number of indent spaces with these 2528mutator/accessor. The default number of spaces is three (the same as 2529JSON::XS), and the acceptable range is from C<0> (no indentation; 2530it'd be better to disable indentation by C<indent(0)>) to C<15>. 2531 2532=head2 sort_by 2533 2534 $json = $json->sort_by($code_ref) 2535 $json = $json->sort_by($subroutine_name) 2536 2537If you just want to sort keys (names) in JSON objects when you 2538C<encode>, enable C<canonical> option (see above) that allows you to 2539sort object keys alphabetically. 2540 2541If you do need to sort non-alphabetically for whatever reasons, 2542you can give a code reference (or a subroutine name) to C<sort_by>, 2543then the argument will be passed to Perl's C<sort> built-in function. 2544 2545As the sorting is done in the JSON::PP scope, you usually need to 2546prepend C<JSON::PP::> to the subroutine name, and the special variables 2547C<$a> and C<$b> used in the subrontine used by C<sort> function. 2548 2549Example: 2550 2551 my %ORDER = (id => 1, class => 2, name => 3); 2552 $json->sort_by(sub { 2553 ($ORDER{$JSON::PP::a} // 999) <=> ($ORDER{$JSON::PP::b} // 999) 2554 or $JSON::PP::a cmp $JSON::PP::b 2555 }); 2556 print $json->encode([ 2557 {name => 'CPAN', id => 1, href => 'http://cpan.org'} 2558 ]); 2559 # [{"id":1,"name":"CPAN","href":"http://cpan.org"}] 2560 2561Note that C<sort_by> affects all the plain hashes in the data structure. 2562If you need finer control, C<tie> necessary hashes with a module that 2563implements ordered hash (such as L<Hash::Ordered> and L<Tie::IxHash>). 2564C<canonical> and C<sort_by> don't affect the key order in C<tie>d 2565hashes. 2566 2567 use Hash::Ordered; 2568 tie my %hash, 'Hash::Ordered', 2569 (name => 'CPAN', id => 1, href => 'http://cpan.org'); 2570 print $json->encode([\%hash]); 2571 # [{"name":"CPAN","id":1,"href":"http://cpan.org"}] # order is kept 2572 2573=head1 INCREMENTAL PARSING 2574 2575This section is also taken from JSON::XS. 2576 2577In some cases, there is the need for incremental parsing of JSON 2578texts. While this module always has to keep both JSON text and resulting 2579Perl data structure in memory at one time, it does allow you to parse a 2580JSON stream incrementally. It does so by accumulating text until it has 2581a full JSON object, which it then can decode. This process is similar to 2582using C<decode_prefix> to see if a full JSON object is available, but 2583is much more efficient (and can be implemented with a minimum of method 2584calls). 2585 2586JSON::PP will only attempt to parse the JSON text once it is sure it 2587has enough text to get a decisive result, using a very simple but 2588truly incremental parser. This means that it sometimes won't stop as 2589early as the full parser, for example, it doesn't detect mismatched 2590parentheses. The only thing it guarantees is that it starts decoding as 2591soon as a syntactically valid JSON text has been seen. This means you need 2592to set resource limits (e.g. C<max_size>) to ensure the parser will stop 2593parsing in the presence if syntax errors. 2594 2595The following methods implement this incremental parser. 2596 2597=head2 incr_parse 2598 2599 $json->incr_parse( [$string] ) # void context 2600 2601 $obj_or_undef = $json->incr_parse( [$string] ) # scalar context 2602 2603 @obj_or_empty = $json->incr_parse( [$string] ) # list context 2604 2605This is the central parsing function. It can both append new text and 2606extract objects from the stream accumulated so far (both of these 2607functions are optional). 2608 2609If C<$string> is given, then this string is appended to the already 2610existing JSON fragment stored in the C<$json> object. 2611 2612After that, if the function is called in void context, it will simply 2613return without doing anything further. This can be used to add more text 2614in as many chunks as you want. 2615 2616If the method is called in scalar context, then it will try to extract 2617exactly I<one> JSON object. If that is successful, it will return this 2618object, otherwise it will return C<undef>. If there is a parse error, 2619this method will croak just as C<decode> would do (one can then use 2620C<incr_skip> to skip the erroneous part). This is the most common way of 2621using the method. 2622 2623And finally, in list context, it will try to extract as many objects 2624from the stream as it can find and return them, or the empty list 2625otherwise. For this to work, there must be no separators (other than 2626whitespace) between the JSON objects or arrays, instead they must be 2627concatenated back-to-back. If an error occurs, an exception will be 2628raised as in the scalar context case. Note that in this case, any 2629previously-parsed JSON texts will be lost. 2630 2631Example: Parse some JSON arrays/objects in a given string and return 2632them. 2633 2634 my @objs = JSON::PP->new->incr_parse ("[5][7][1,2]"); 2635 2636=head2 incr_text 2637 2638 $lvalue_string = $json->incr_text 2639 2640This method returns the currently stored JSON fragment as an lvalue, that 2641is, you can manipulate it. This I<only> works when a preceding call to 2642C<incr_parse> in I<scalar context> successfully returned an object. Under 2643all other circumstances you must not call this function (I mean it. 2644although in simple tests it might actually work, it I<will> fail under 2645real world conditions). As a special exception, you can also call this 2646method before having parsed anything. 2647 2648That means you can only use this function to look at or manipulate text 2649before or after complete JSON objects, not while the parser is in the 2650middle of parsing a JSON object. 2651 2652This function is useful in two cases: a) finding the trailing text after a 2653JSON object or b) parsing multiple JSON objects separated by non-JSON text 2654(such as commas). 2655 2656=head2 incr_skip 2657 2658 $json->incr_skip 2659 2660This will reset the state of the incremental parser and will remove 2661the parsed text from the input buffer so far. This is useful after 2662C<incr_parse> died, in which case the input buffer and incremental parser 2663state is left unchanged, to skip the text parsed so far and to reset the 2664parse state. 2665 2666The difference to C<incr_reset> is that only text until the parse error 2667occurred is removed. 2668 2669=head2 incr_reset 2670 2671 $json->incr_reset 2672 2673This completely resets the incremental parser, that is, after this call, 2674it will be as if the parser had never parsed anything. 2675 2676This is useful if you want to repeatedly parse JSON objects and want to 2677ignore any trailing data, which means you have to reset the parser after 2678each successful decode. 2679 2680=head1 MAPPING 2681 2682Most of this section is also taken from JSON::XS. 2683 2684This section describes how JSON::PP maps Perl values to JSON values and 2685vice versa. These mappings are designed to "do the right thing" in most 2686circumstances automatically, preserving round-tripping characteristics 2687(what you put in comes out as something equivalent). 2688 2689For the more enlightened: note that in the following descriptions, 2690lowercase I<perl> refers to the Perl interpreter, while uppercase I<Perl> 2691refers to the abstract Perl language itself. 2692 2693=head2 JSON -> PERL 2694 2695=over 4 2696 2697=item object 2698 2699A JSON object becomes a reference to a hash in Perl. No ordering of object 2700keys is preserved (JSON does not preserve object key ordering itself). 2701 2702=item array 2703 2704A JSON array becomes a reference to an array in Perl. 2705 2706=item string 2707 2708A JSON string becomes a string scalar in Perl - Unicode codepoints in JSON 2709are represented by the same codepoints in the Perl string, so no manual 2710decoding is necessary. 2711 2712=item number 2713 2714A JSON number becomes either an integer, numeric (floating point) or 2715string scalar in perl, depending on its range and any fractional parts. On 2716the Perl level, there is no difference between those as Perl handles all 2717the conversion details, but an integer may take slightly less memory and 2718might represent more values exactly than floating point numbers. 2719 2720If the number consists of digits only, JSON::PP will try to represent 2721it as an integer value. If that fails, it will try to represent it as 2722a numeric (floating point) value if that is possible without loss of 2723precision. Otherwise it will preserve the number as a string value (in 2724which case you lose roundtripping ability, as the JSON number will be 2725re-encoded to a JSON string). 2726 2727Numbers containing a fractional or exponential part will always be 2728represented as numeric (floating point) values, possibly at a loss of 2729precision (in which case you might lose perfect roundtripping ability, but 2730the JSON number will still be re-encoded as a JSON number). 2731 2732Note that precision is not accuracy - binary floating point values cannot 2733represent most decimal fractions exactly, and when converting from and to 2734floating point, JSON::PP only guarantees precision up to but not including 2735the least significant bit. 2736 2737When C<allow_bignum> is enabled, big integer values and any numeric 2738values will be converted into L<Math::BigInt> and L<Math::BigFloat> 2739objects respectively, without becoming string scalars or losing 2740precision. 2741 2742=item true, false 2743 2744These JSON atoms become C<JSON::PP::true> and C<JSON::PP::false>, 2745respectively. They are overloaded to act almost exactly like the numbers 2746C<1> and C<0>. You can check whether a scalar is a JSON boolean by using 2747the C<JSON::PP::is_bool> function. 2748 2749=item null 2750 2751A JSON null atom becomes C<undef> in Perl. 2752 2753=item shell-style comments (C<< # I<text> >>) 2754 2755As a nonstandard extension to the JSON syntax that is enabled by the 2756C<relaxed> setting, shell-style comments are allowed. They can start 2757anywhere outside strings and go till the end of the line. 2758 2759=item tagged values (C<< (I<tag>)I<value> >>). 2760 2761Another nonstandard extension to the JSON syntax, enabled with the 2762C<allow_tags> setting, are tagged values. In this implementation, the 2763I<tag> must be a perl package/class name encoded as a JSON string, and the 2764I<value> must be a JSON array encoding optional constructor arguments. 2765 2766See L<OBJECT SERIALISATION>, below, for details. 2767 2768=back 2769 2770 2771=head2 PERL -> JSON 2772 2773The mapping from Perl to JSON is slightly more difficult, as Perl is a 2774truly typeless language, so we can only guess which JSON type is meant by 2775a Perl value. 2776 2777=over 4 2778 2779=item hash references 2780 2781Perl hash references become JSON objects. As there is no inherent 2782ordering in hash keys (or JSON objects), they will usually be encoded 2783in a pseudo-random order. JSON::PP can optionally sort the hash keys 2784(determined by the I<canonical> flag and/or I<sort_by> property), so 2785the same data structure will serialise to the same JSON text (given 2786same settings and version of JSON::PP), but this incurs a runtime 2787overhead and is only rarely useful, e.g. when you want to compare some 2788JSON text against another for equality. 2789 2790=item array references 2791 2792Perl array references become JSON arrays. 2793 2794=item other references 2795 2796Other unblessed references are generally not allowed and will cause an 2797exception to be thrown, except for references to the integers C<0> and 2798C<1>, which get turned into C<false> and C<true> atoms in JSON. You can 2799also use C<JSON::PP::false> and C<JSON::PP::true> to improve 2800readability. 2801 2802 to_json [\0, JSON::PP::true] # yields [false,true] 2803 2804=item JSON::PP::true, JSON::PP::false 2805 2806These special values become JSON true and JSON false values, 2807respectively. You can also use C<\1> and C<\0> directly if you want. 2808 2809=item JSON::PP::null 2810 2811This special value becomes JSON null. 2812 2813=item blessed objects 2814 2815Blessed objects are not directly representable in JSON, but C<JSON::PP> 2816allows various ways of handling objects. See L<OBJECT SERIALISATION>, 2817below, for details. 2818 2819=item simple scalars 2820 2821Simple Perl scalars (any scalar that is not a reference) are the most 2822difficult objects to encode: JSON::PP will encode undefined scalars as 2823JSON C<null> values, scalars that have last been used in a string context 2824before encoding as JSON strings, and anything else as number value: 2825 2826 # dump as number 2827 encode_json [2] # yields [2] 2828 encode_json [-3.0e17] # yields [-3e+17] 2829 my $value = 5; encode_json [$value] # yields [5] 2830 2831 # used as string, so dump as string 2832 print $value; 2833 encode_json [$value] # yields ["5"] 2834 2835 # undef becomes null 2836 encode_json [undef] # yields [null] 2837 2838You can force the type to be a JSON string by stringifying it: 2839 2840 my $x = 3.1; # some variable containing a number 2841 "$x"; # stringified 2842 $x .= ""; # another, more awkward way to stringify 2843 print $x; # perl does it for you, too, quite often 2844 # (but for older perls) 2845 2846You can force the type to be a JSON number by numifying it: 2847 2848 my $x = "3"; # some variable containing a string 2849 $x += 0; # numify it, ensuring it will be dumped as a number 2850 $x *= 1; # same thing, the choice is yours. 2851 2852You can not currently force the type in other, less obscure, ways. 2853 2854Since version 2.91_01, JSON::PP uses a different number detection logic 2855that converts a scalar that is possible to turn into a number safely. 2856The new logic is slightly faster, and tends to help people who use older 2857perl or who want to encode complicated data structure. However, this may 2858results in a different JSON text from the one JSON::XS encodes (and 2859thus may break tests that compare entire JSON texts). If you do 2860need the previous behavior for compatibility or for finer control, 2861set PERL_JSON_PP_USE_B environmental variable to true before you 2862C<use> JSON::PP (or JSON.pm). 2863 2864Note that numerical precision has the same meaning as under Perl (so 2865binary to decimal conversion follows the same rules as in Perl, which 2866can differ to other languages). Also, your perl interpreter might expose 2867extensions to the floating point numbers of your platform, such as 2868infinities or NaN's - these cannot be represented in JSON, and it is an 2869error to pass those in. 2870 2871JSON::PP (and JSON::XS) trusts what you pass to C<encode> method 2872(or C<encode_json> function) is a clean, validated data structure with 2873values that can be represented as valid JSON values only, because it's 2874not from an external data source (as opposed to JSON texts you pass to 2875C<decode> or C<decode_json>, which JSON::PP considers tainted and 2876doesn't trust). As JSON::PP doesn't know exactly what you and consumers 2877of your JSON texts want the unexpected values to be (you may want to 2878convert them into null, or to stringify them with or without 2879normalisation (string representation of infinities/NaN may vary 2880depending on platforms), or to croak without conversion), you're advised 2881to do what you and your consumers need before you encode, and also not 2882to numify values that may start with values that look like a number 2883(including infinities/NaN), without validating. 2884 2885=back 2886 2887=head2 OBJECT SERIALISATION 2888 2889As JSON cannot directly represent Perl objects, you have to choose between 2890a pure JSON representation (without the ability to deserialise the object 2891automatically again), and a nonstandard extension to the JSON syntax, 2892tagged values. 2893 2894=head3 SERIALISATION 2895 2896What happens when C<JSON::PP> encounters a Perl object depends on the 2897C<allow_blessed>, C<convert_blessed>, C<allow_tags> and C<allow_bignum> 2898settings, which are used in this order: 2899 2900=over 4 2901 2902=item 1. C<allow_tags> is enabled and the object has a C<FREEZE> method. 2903 2904In this case, C<JSON::PP> creates a tagged JSON value, using a nonstandard 2905extension to the JSON syntax. 2906 2907This works by invoking the C<FREEZE> method on the object, with the first 2908argument being the object to serialise, and the second argument being the 2909constant string C<JSON> to distinguish it from other serialisers. 2910 2911The C<FREEZE> method can return any number of values (i.e. zero or 2912more). These values and the paclkage/classname of the object will then be 2913encoded as a tagged JSON value in the following format: 2914 2915 ("classname")[FREEZE return values...] 2916 2917e.g.: 2918 2919 ("URI")["http://www.google.com/"] 2920 ("MyDate")[2013,10,29] 2921 ("ImageData::JPEG")["Z3...VlCg=="] 2922 2923For example, the hypothetical C<My::Object> C<FREEZE> method might use the 2924objects C<type> and C<id> members to encode the object: 2925 2926 sub My::Object::FREEZE { 2927 my ($self, $serialiser) = @_; 2928 2929 ($self->{type}, $self->{id}) 2930 } 2931 2932=item 2. C<convert_blessed> is enabled and the object has a C<TO_JSON> method. 2933 2934In this case, the C<TO_JSON> method of the object is invoked in scalar 2935context. It must return a single scalar that can be directly encoded into 2936JSON. This scalar replaces the object in the JSON text. 2937 2938For example, the following C<TO_JSON> method will convert all L<URI> 2939objects to JSON strings when serialised. The fact that these values 2940originally were L<URI> objects is lost. 2941 2942 sub URI::TO_JSON { 2943 my ($uri) = @_; 2944 $uri->as_string 2945 } 2946 2947=item 3. C<allow_bignum> is enabled and the object is a C<Math::BigInt> or C<Math::BigFloat>. 2948 2949The object will be serialised as a JSON number value. 2950 2951=item 4. C<allow_blessed> is enabled. 2952 2953The object will be serialised as a JSON null value. 2954 2955=item 5. none of the above 2956 2957If none of the settings are enabled or the respective methods are missing, 2958C<JSON::PP> throws an exception. 2959 2960=back 2961 2962=head3 DESERIALISATION 2963 2964For deserialisation there are only two cases to consider: either 2965nonstandard tagging was used, in which case C<allow_tags> decides, 2966or objects cannot be automatically be deserialised, in which 2967case you can use postprocessing or the C<filter_json_object> or 2968C<filter_json_single_key_object> callbacks to get some real objects our of 2969your JSON. 2970 2971This section only considers the tagged value case: a tagged JSON object 2972is encountered during decoding and C<allow_tags> is disabled, a parse 2973error will result (as if tagged values were not part of the grammar). 2974 2975If C<allow_tags> is enabled, C<JSON::PP> will look up the C<THAW> method 2976of the package/classname used during serialisation (it will not attempt 2977to load the package as a Perl module). If there is no such method, the 2978decoding will fail with an error. 2979 2980Otherwise, the C<THAW> method is invoked with the classname as first 2981argument, the constant string C<JSON> as second argument, and all the 2982values from the JSON array (the values originally returned by the 2983C<FREEZE> method) as remaining arguments. 2984 2985The method must then return the object. While technically you can return 2986any Perl scalar, you might have to enable the C<allow_nonref> setting to 2987make that work in all cases, so better return an actual blessed reference. 2988 2989As an example, let's implement a C<THAW> function that regenerates the 2990C<My::Object> from the C<FREEZE> example earlier: 2991 2992 sub My::Object::THAW { 2993 my ($class, $serialiser, $type, $id) = @_; 2994 2995 $class->new (type => $type, id => $id) 2996 } 2997 2998 2999=head1 ENCODING/CODESET FLAG NOTES 3000 3001This section is taken from JSON::XS. 3002 3003The interested reader might have seen a number of flags that signify 3004encodings or codesets - C<utf8>, C<latin1> and C<ascii>. There seems to be 3005some confusion on what these do, so here is a short comparison: 3006 3007C<utf8> controls whether the JSON text created by C<encode> (and expected 3008by C<decode>) is UTF-8 encoded or not, while C<latin1> and C<ascii> only 3009control whether C<encode> escapes character values outside their respective 3010codeset range. Neither of these flags conflict with each other, although 3011some combinations make less sense than others. 3012 3013Care has been taken to make all flags symmetrical with respect to 3014C<encode> and C<decode>, that is, texts encoded with any combination of 3015these flag values will be correctly decoded when the same flags are used 3016- in general, if you use different flag settings while encoding vs. when 3017decoding you likely have a bug somewhere. 3018 3019Below comes a verbose discussion of these flags. Note that a "codeset" is 3020simply an abstract set of character-codepoint pairs, while an encoding 3021takes those codepoint numbers and I<encodes> them, in our case into 3022octets. Unicode is (among other things) a codeset, UTF-8 is an encoding, 3023and ISO-8859-1 (= latin 1) and ASCII are both codesets I<and> encodings at 3024the same time, which can be confusing. 3025 3026=over 4 3027 3028=item C<utf8> flag disabled 3029 3030When C<utf8> is disabled (the default), then C<encode>/C<decode> generate 3031and expect Unicode strings, that is, characters with high ordinal Unicode 3032values (> 255) will be encoded as such characters, and likewise such 3033characters are decoded as-is, no changes to them will be done, except 3034"(re-)interpreting" them as Unicode codepoints or Unicode characters, 3035respectively (to Perl, these are the same thing in strings unless you do 3036funny/weird/dumb stuff). 3037 3038This is useful when you want to do the encoding yourself (e.g. when you 3039want to have UTF-16 encoded JSON texts) or when some other layer does 3040the encoding for you (for example, when printing to a terminal using a 3041filehandle that transparently encodes to UTF-8 you certainly do NOT want 3042to UTF-8 encode your data first and have Perl encode it another time). 3043 3044=item C<utf8> flag enabled 3045 3046If the C<utf8>-flag is enabled, C<encode>/C<decode> will encode all 3047characters using the corresponding UTF-8 multi-byte sequence, and will 3048expect your input strings to be encoded as UTF-8, that is, no "character" 3049of the input string must have any value > 255, as UTF-8 does not allow 3050that. 3051 3052The C<utf8> flag therefore switches between two modes: disabled means you 3053will get a Unicode string in Perl, enabled means you get an UTF-8 encoded 3054octet/binary string in Perl. 3055 3056=item C<latin1> or C<ascii> flags enabled 3057 3058With C<latin1> (or C<ascii>) enabled, C<encode> will escape characters 3059with ordinal values > 255 (> 127 with C<ascii>) and encode the remaining 3060characters as specified by the C<utf8> flag. 3061 3062If C<utf8> is disabled, then the result is also correctly encoded in those 3063character sets (as both are proper subsets of Unicode, meaning that a 3064Unicode string with all character values < 256 is the same thing as a 3065ISO-8859-1 string, and a Unicode string with all character values < 128 is 3066the same thing as an ASCII string in Perl). 3067 3068If C<utf8> is enabled, you still get a correct UTF-8-encoded string, 3069regardless of these flags, just some more characters will be escaped using 3070C<\uXXXX> then before. 3071 3072Note that ISO-8859-1-I<encoded> strings are not compatible with UTF-8 3073encoding, while ASCII-encoded strings are. That is because the ISO-8859-1 3074encoding is NOT a subset of UTF-8 (despite the ISO-8859-1 I<codeset> being 3075a subset of Unicode), while ASCII is. 3076 3077Surprisingly, C<decode> will ignore these flags and so treat all input 3078values as governed by the C<utf8> flag. If it is disabled, this allows you 3079to decode ISO-8859-1- and ASCII-encoded strings, as both strict subsets of 3080Unicode. If it is enabled, you can correctly decode UTF-8 encoded strings. 3081 3082So neither C<latin1> nor C<ascii> are incompatible with the C<utf8> flag - 3083they only govern when the JSON output engine escapes a character or not. 3084 3085The main use for C<latin1> is to relatively efficiently store binary data 3086as JSON, at the expense of breaking compatibility with most JSON decoders. 3087 3088The main use for C<ascii> is to force the output to not contain characters 3089with values > 127, which means you can interpret the resulting string 3090as UTF-8, ISO-8859-1, ASCII, KOI8-R or most about any character set and 30918-bit-encoding, and still get the same data structure back. This is useful 3092when your channel for JSON transfer is not 8-bit clean or the encoding 3093might be mangled in between (e.g. in mail), and works because ASCII is a 3094proper subset of most 8-bit and multibyte encodings in use in the world. 3095 3096=back 3097 3098=head1 BUGS 3099 3100Please report bugs on a specific behavior of this module to RT or GitHub 3101issues (preferred): 3102 3103L<https://github.com/makamaka/JSON-PP/issues> 3104 3105L<https://rt.cpan.org/Public/Dist/Display.html?Queue=JSON-PP> 3106 3107As for new features and requests to change common behaviors, please 3108ask the author of JSON::XS (Marc Lehmann, E<lt>schmorp[at]schmorp.deE<gt>) 3109first, by email (important!), to keep compatibility among JSON.pm backends. 3110 3111Generally speaking, if you need something special for you, you are advised 3112to create a new module, maybe based on L<JSON::Tiny>, which is smaller and 3113written in a much cleaner way than this module. 3114 3115=head1 SEE ALSO 3116 3117The F<json_pp> command line utility for quick experiments. 3118 3119L<JSON::XS>, L<Cpanel::JSON::XS>, and L<JSON::Tiny> for faster alternatives. 3120L<JSON> and L<JSON::MaybeXS> for easy migration. 3121 3122L<JSON::PP::Compat5005> and L<JSON::PP::Compat5006> for older perl users. 3123 3124RFC4627 (L<http://www.ietf.org/rfc/rfc4627.txt>) 3125 3126RFC7159 (L<http://www.ietf.org/rfc/rfc7159.txt>) 3127 3128RFC8259 (L<http://www.ietf.org/rfc/rfc8259.txt>) 3129 3130=head1 AUTHOR 3131 3132Makamaka Hannyaharamitu, E<lt>makamaka[at]cpan.orgE<gt> 3133 3134=head1 CURRENT MAINTAINER 3135 3136Kenichi Ishigaki, E<lt>ishigaki[at]cpan.orgE<gt> 3137 3138=head1 COPYRIGHT AND LICENSE 3139 3140Copyright 2007-2016 by Makamaka Hannyaharamitu 3141 3142Most of the documentation is taken from JSON::XS by Marc Lehmann 3143 3144This library is free software; you can redistribute it and/or modify 3145it under the same terms as Perl itself. 3146 3147=cut 3148