| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 .\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) |  | 
| 2 .\" |  | 
| 3 .\" Standard preamble: |  | 
| 4 .\" ======================================================================== |  | 
| 5 .de Sp \" Vertical space (when we can't use .PP) |  | 
| 6 .if t .sp .5v |  | 
| 7 .if n .sp |  | 
| 8 .. |  | 
| 9 .de Vb \" Begin verbatim text |  | 
| 10 .ft CW |  | 
| 11 .nf |  | 
| 12 .ne \\$1 |  | 
| 13 .. |  | 
| 14 .de Ve \" End verbatim text |  | 
| 15 .ft R |  | 
| 16 .fi |  | 
| 17 .. |  | 
| 18 .\" Set up some character translations and predefined strings.  \*(-- will |  | 
| 19 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left |  | 
| 20 .\" double quote, and \*(R" will give a right double quote.  \*(C+ will |  | 
| 21 .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and |  | 
| 22 .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff, |  | 
| 23 .\" nothing in troff, for use with C<>. |  | 
| 24 .tr \(*W- |  | 
| 25 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' |  | 
| 26 .ie n \{\ |  | 
| 27 .    ds -- \(*W- |  | 
| 28 .    ds PI pi |  | 
| 29 .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch |  | 
| 30 .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch |  | 
| 31 .    ds L" "" |  | 
| 32 .    ds R" "" |  | 
| 33 .    ds C` "" |  | 
| 34 .    ds C' "" |  | 
| 35 'br\} |  | 
| 36 .el\{\ |  | 
| 37 .    ds -- \|\(em\| |  | 
| 38 .    ds PI \(*p |  | 
| 39 .    ds L" `` |  | 
| 40 .    ds R" '' |  | 
| 41 'br\} |  | 
| 42 .\" |  | 
| 43 .\" Escape single quotes in literal strings from groff's Unicode transform. |  | 
| 44 .ie \n(.g .ds Aq \(aq |  | 
| 45 .el       .ds Aq ' |  | 
| 46 .\" |  | 
| 47 .\" If the F register is turned on, we'll generate index entries on stderr for |  | 
| 48 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index |  | 
| 49 .\" entries marked with X<> in POD.  Of course, you'll have to process the |  | 
| 50 .\" output yourself in some meaningful fashion. |  | 
| 51 .ie \nF \{\ |  | 
| 52 .    de IX |  | 
| 53 .    tm Index:\\$1\t\\n%\t"\\$2" |  | 
| 54 .. |  | 
| 55 .    nr % 0 |  | 
| 56 .    rr F |  | 
| 57 .\} |  | 
| 58 .el \{\ |  | 
| 59 .    de IX |  | 
| 60 .. |  | 
| 61 .\} |  | 
| 62 .\" |  | 
| 63 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). |  | 
| 64 .\" Fear.  Run.  Save yourself.  No user-serviceable parts. |  | 
| 65 .    \" fudge factors for nroff and troff |  | 
| 66 .if n \{\ |  | 
| 67 .    ds #H 0 |  | 
| 68 .    ds #V .8m |  | 
| 69 .    ds #F .3m |  | 
| 70 .    ds #[ \f1 |  | 
| 71 .    ds #] \fP |  | 
| 72 .\} |  | 
| 73 .if t \{\ |  | 
| 74 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m) |  | 
| 75 .    ds #V .6m |  | 
| 76 .    ds #F 0 |  | 
| 77 .    ds #[ \& |  | 
| 78 .    ds #] \& |  | 
| 79 .\} |  | 
| 80 .    \" simple accents for nroff and troff |  | 
| 81 .if n \{\ |  | 
| 82 .    ds ' \& |  | 
| 83 .    ds ` \& |  | 
| 84 .    ds ^ \& |  | 
| 85 .    ds , \& |  | 
| 86 .    ds ~ ~ |  | 
| 87 .    ds / |  | 
| 88 .\} |  | 
| 89 .if t \{\ |  | 
| 90 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" |  | 
| 91 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' |  | 
| 92 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' |  | 
| 93 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' |  | 
| 94 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' |  | 
| 95 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' |  | 
| 96 .\} |  | 
| 97 .    \" troff and (daisy-wheel) nroff accents |  | 
| 98 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:
      u'\v'\*(#V' |  | 
| 99 .ds 8 \h'\*(#H'\(*b\h'-\*(#H' |  | 
| 100 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\
      *(#] |  | 
| 101 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' |  | 
| 102 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' |  | 
| 103 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] |  | 
| 104 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] |  | 
| 105 .ds ae a\h'-(\w'a'u*4/10)'e |  | 
| 106 .ds Ae A\h'-(\w'A'u*4/10)'E |  | 
| 107 .    \" corrections for vroff |  | 
| 108 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' |  | 
| 109 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' |  | 
| 110 .    \" for low resolution devices (crt and lpr) |  | 
| 111 .if \n(.H>23 .if \n(.V>19 \ |  | 
| 112 \{\ |  | 
| 113 .    ds : e |  | 
| 114 .    ds 8 ss |  | 
| 115 .    ds o a |  | 
| 116 .    ds d- d\h'-1'\(ga |  | 
| 117 .    ds D- D\h'-1'\(hy |  | 
| 118 .    ds th \o'bp' |  | 
| 119 .    ds Th \o'LP' |  | 
| 120 .    ds ae ae |  | 
| 121 .    ds Ae AE |  | 
| 122 .\} |  | 
| 123 .rm #[ #] #H #V #F C |  | 
| 124 .\" ======================================================================== |  | 
| 125 .\" |  | 
| 126 .IX Title "JSON::backportPP 3pm" |  | 
| 127 .TH JSON::backportPP 3pm "2013-05-23" "perl v5.14.2" "User Contributed Perl Docu
      mentation" |  | 
| 128 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes |  | 
| 129 .\" way too many mistakes in technical documents. |  | 
| 130 .if n .ad l |  | 
| 131 .nh |  | 
| 132 .SH "NAME" |  | 
| 133 JSON::PP \- JSON::XS compatible pure\-Perl module. |  | 
| 134 .SH "SYNOPSIS" |  | 
| 135 .IX Header "SYNOPSIS" |  | 
| 136 .Vb 1 |  | 
| 137 \& use JSON::PP; |  | 
| 138 \& |  | 
| 139 \& # exported functions, they croak on error |  | 
| 140 \& # and expect/generate UTF\-8 |  | 
| 141 \& |  | 
| 142 \& $utf8_encoded_json_text = encode_json $perl_hash_or_arrayref; |  | 
| 143 \& $perl_hash_or_arrayref  = decode_json $utf8_encoded_json_text; |  | 
| 144 \& |  | 
| 145 \& # OO\-interface |  | 
| 146 \& |  | 
| 147 \& $coder = JSON::PP\->new\->ascii\->pretty\->allow_nonref; |  | 
| 148 \& |  | 
| 149 \& $json_text   = $json\->encode( $perl_scalar ); |  | 
| 150 \& $perl_scalar = $json\->decode( $json_text ); |  | 
| 151 \& |  | 
| 152 \& $pretty_printed = $json\->pretty\->encode( $perl_scalar ); # pretty\-printing |  | 
| 153 \& |  | 
| 154 \& # Note that JSON version 2.0 and above will automatically use |  | 
| 155 \& # JSON::XS or JSON::PP, so you should be able to just: |  | 
| 156 \& |  | 
| 157 \& use JSON; |  | 
| 158 .Ve |  | 
| 159 .SH "VERSION" |  | 
| 160 .IX Header "VERSION" |  | 
| 161 .Vb 1 |  | 
| 162 \&    2.27200 |  | 
| 163 .Ve |  | 
| 164 .PP |  | 
| 165 \&\s-1JSON::XS\s0 2.27 (~2.30) compatible. |  | 
| 166 .SH "DESCRIPTION" |  | 
| 167 .IX Header "DESCRIPTION" |  | 
| 168 This module is \s-1JSON::XS\s0 compatible pure Perl module. |  | 
| 169 (Perl 5.8 or later is recommended) |  | 
| 170 .PP |  | 
| 171 \&\s-1JSON::XS\s0 is the fastest and most proper \s-1JSON\s0 module on \s-1CPAN\
      s0. |  | 
| 172 It is written by Marc Lehmann in C, so must be compiled and |  | 
| 173 installed in the used environment. |  | 
| 174 .PP |  | 
| 175 \&\s-1JSON::PP\s0 is a pure-Perl module and has compatibility to \s-1JSON::XS\s0
      . |  | 
| 176 .SS "\s-1FEATURES\s0" |  | 
| 177 .IX Subsection "FEATURES" |  | 
| 178 .IP "\(bu" 4 |  | 
| 179 correct unicode handling |  | 
| 180 .Sp |  | 
| 181 This module knows how to handle Unicode (depending on Perl version). |  | 
| 182 .Sp |  | 
| 183 See to \*(L"A \s-1FEW\s0 \s-1NOTES\s0 \s-1ON\s0 \s-1UNICODE\s0 \s-1AND\s0 \s-1PE
      RL\s0\*(R" in \s-1JSON::XS\s0 and |  | 
| 184 \&\*(L"\s-1UNICODE\s0 \s-1HANDLING\s0 \s-1ON\s0 \s-1PERLS\s0\*(R". |  | 
| 185 .IP "\(bu" 4 |  | 
| 186 round-trip integrity |  | 
| 187 .Sp |  | 
| 188 When you serialise a perl data structure using only data types |  | 
| 189 supported by \s-1JSON\s0 and Perl, the deserialised data structure is |  | 
| 190 identical on the Perl level. (e.g. the string \*(L"2.0\*(R" doesn't suddenly |  | 
| 191 become \*(L"2\*(R" just because it looks like a number). There \fIare\fR minor |  | 
| 192 exceptions to this, read the \s-1MAPPING\s0 section below to learn about |  | 
| 193 those. |  | 
| 194 .IP "\(bu" 4 |  | 
| 195 strict checking of \s-1JSON\s0 correctness |  | 
| 196 .Sp |  | 
| 197 There is no guessing, no generating of illegal \s-1JSON\s0 texts by default, |  | 
| 198 and only \s-1JSON\s0 is accepted as input by default (the latter is a |  | 
| 199 security feature). But when some options are set, loose checking |  | 
| 200 features are available. |  | 
| 201 .SH "FUNCTIONAL INTERFACE" |  | 
| 202 .IX Header "FUNCTIONAL INTERFACE" |  | 
| 203 Some documents are copied and modified from \*(L"\s-1FUNCTIONAL\s0 \s-1INTERFACE
      \s0\*(R" in \s-1JSON::XS\s0. |  | 
| 204 .SS "encode_json" |  | 
| 205 .IX Subsection "encode_json" |  | 
| 206 .Vb 1 |  | 
| 207 \&    $json_text = encode_json $perl_scalar |  | 
| 208 .Ve |  | 
| 209 .PP |  | 
| 210 Converts the given Perl data structure to a \s-1UTF\-8\s0 encoded, binary string
      . |  | 
| 211 .PP |  | 
| 212 This function call is functionally identical to: |  | 
| 213 .PP |  | 
| 214 .Vb 1 |  | 
| 215 \&    $json_text = JSON::PP\->new\->utf8\->encode($perl_scalar) |  | 
| 216 .Ve |  | 
| 217 .SS "decode_json" |  | 
| 218 .IX Subsection "decode_json" |  | 
| 219 .Vb 1 |  | 
| 220 \&    $perl_scalar = decode_json $json_text |  | 
| 221 .Ve |  | 
| 222 .PP |  | 
| 223 The opposite of \f(CW\*(C`encode_json\*(C'\fR: expects an \s-1UTF\-8\s0 (binary)
       string and tries |  | 
| 224 to parse that as an \s-1UTF\-8\s0 encoded \s-1JSON\s0 text, returning the result
      ing |  | 
| 225 reference. |  | 
| 226 .PP |  | 
| 227 This function call is functionally identical to: |  | 
| 228 .PP |  | 
| 229 .Vb 1 |  | 
| 230 \&    $perl_scalar = JSON::PP\->new\->utf8\->decode($json_text) |  | 
| 231 .Ve |  | 
| 232 .SS "JSON::PP::is_bool" |  | 
| 233 .IX Subsection "JSON::PP::is_bool" |  | 
| 234 .Vb 1 |  | 
| 235 \&    $is_boolean = JSON::PP::is_bool($scalar) |  | 
| 236 .Ve |  | 
| 237 .PP |  | 
| 238 Returns true if the passed scalar represents either JSON::PP::true or |  | 
| 239 JSON::PP::false, two constants that act like \f(CW1\fR and \f(CW0\fR respectivel
      y |  | 
| 240 and are also used to represent \s-1JSON\s0 \f(CW\*(C`true\*(C'\fR and \f(CW\*(C`
      false\*(C'\fR in Perl strings. |  | 
| 241 .SS "JSON::PP::true" |  | 
| 242 .IX Subsection "JSON::PP::true" |  | 
| 243 Returns \s-1JSON\s0 true value which is blessed object. |  | 
| 244 It \f(CW\*(C`isa\*(C'\fR JSON::PP::Boolean object. |  | 
| 245 .SS "JSON::PP::false" |  | 
| 246 .IX Subsection "JSON::PP::false" |  | 
| 247 Returns \s-1JSON\s0 false value which is blessed object. |  | 
| 248 It \f(CW\*(C`isa\*(C'\fR JSON::PP::Boolean object. |  | 
| 249 .SS "JSON::PP::null" |  | 
| 250 .IX Subsection "JSON::PP::null" |  | 
| 251 Returns \f(CW\*(C`undef\*(C'\fR. |  | 
| 252 .PP |  | 
| 253 See \s-1MAPPING\s0, below, for more information on how \s-1JSON\s0 values are ma
      pped to |  | 
| 254 Perl. |  | 
| 255 .SH "HOW DO I DECODE A DATA FROM OUTER AND ENCODE TO OUTER" |  | 
| 256 .IX Header "HOW DO I DECODE A DATA FROM OUTER AND ENCODE TO OUTER" |  | 
| 257 This section supposes that your perl version is 5.8 or later. |  | 
| 258 .PP |  | 
| 259 If you know a \s-1JSON\s0 text from an outer world \- a network, a file content,
       and so on, |  | 
| 260 is encoded in \s-1UTF\-8\s0, you should use \f(CW\*(C`decode_json\*(C'\fR or \f(
      CW\*(C`JSON\*(C'\fR module object |  | 
| 261 with \f(CW\*(C`utf8\*(C'\fR enable. And the decoded result will contain \s-1UNIC
      ODE\s0 characters. |  | 
| 262 .PP |  | 
| 263 .Vb 4 |  | 
| 264 \&  # from network |  | 
| 265 \&  my $json        = JSON::PP\->new\->utf8; |  | 
| 266 \&  my $json_text   = CGI\->new\->param( \*(Aqjson_data\*(Aq ); |  | 
| 267 \&  my $perl_scalar = $json\->decode( $json_text ); |  | 
| 268 \& |  | 
| 269 \&  # from file content |  | 
| 270 \&  local $/; |  | 
| 271 \&  open( my $fh, \*(Aq<\*(Aq, \*(Aqjson.data\*(Aq ); |  | 
| 272 \&  $json_text   = <$fh>; |  | 
| 273 \&  $perl_scalar = decode_json( $json_text ); |  | 
| 274 .Ve |  | 
| 275 .PP |  | 
| 276 If an outer data is not encoded in \s-1UTF\-8\s0, firstly you should \f(CW\*(C`d
      ecode\*(C'\fR it. |  | 
| 277 .PP |  | 
| 278 .Vb 5 |  | 
| 279 \&  use Encode; |  | 
| 280 \&  local $/; |  | 
| 281 \&  open( my $fh, \*(Aq<\*(Aq, \*(Aqjson.data\*(Aq ); |  | 
| 282 \&  my $encoding = \*(Aqcp932\*(Aq; |  | 
| 283 \&  my $unicode_json_text = decode( $encoding, <$fh> ); # UNICODE |  | 
| 284 \& |  | 
| 285 \&  # or you can write the below code. |  | 
| 286 \&  # |  | 
| 287 \&  # open( my $fh, "<:encoding($encoding)", \*(Aqjson.data\*(Aq ); |  | 
| 288 \&  # $unicode_json_text = <$fh>; |  | 
| 289 .Ve |  | 
| 290 .PP |  | 
| 291 In this case, \f(CW$unicode_json_text\fR is of course \s-1UNICODE\s0 string. |  | 
| 292 So you \fBcannot\fR use \f(CW\*(C`decode_json\*(C'\fR nor \f(CW\*(C`JSON\*(C'\fR
       module object with \f(CW\*(C`utf8\*(C'\fR enable. |  | 
| 293 Instead of them, you use \f(CW\*(C`JSON\*(C'\fR module object with \f(CW\*(C`utf
      8\*(C'\fR disable. |  | 
| 294 .PP |  | 
| 295 .Vb 1 |  | 
| 296 \&  $perl_scalar = $json\->utf8(0)\->decode( $unicode_json_text ); |  | 
| 297 .Ve |  | 
| 298 .PP |  | 
| 299 Or \f(CW\*(C`encode \*(Aqutf8\*(Aq\*(C'\fR and \f(CW\*(C`decode_json\*(C'\fR: |  | 
| 300 .PP |  | 
| 301 .Vb 2 |  | 
| 302 \&  $perl_scalar = decode_json( encode( \*(Aqutf8\*(Aq, $unicode_json_text ) ); |  | 
| 303 \&  # this way is not efficient. |  | 
| 304 .Ve |  | 
| 305 .PP |  | 
| 306 And now, you want to convert your \f(CW$perl_scalar\fR into \s-1JSON\s0 data and |  | 
| 307 send it to an outer world \- a network or a file content, and so on. |  | 
| 308 .PP |  | 
| 309 Your data usually contains \s-1UNICODE\s0 strings and you want the converted dat
      a to be encoded |  | 
| 310 in \s-1UTF\-8\s0, you should use \f(CW\*(C`encode_json\*(C'\fR or \f(CW\*(C`JSON
      \*(C'\fR module object with \f(CW\*(C`utf8\*(C'\fR enable. |  | 
| 311 .PP |  | 
| 312 .Vb 3 |  | 
| 313 \&  print encode_json( $perl_scalar ); # to a network? file? or display? |  | 
| 314 \&  # or |  | 
| 315 \&  print $json\->utf8\->encode( $perl_scalar ); |  | 
| 316 .Ve |  | 
| 317 .PP |  | 
| 318 If \f(CW$perl_scalar\fR does not contain \s-1UNICODE\s0 but \f(CW$encoding\fR\-e
      ncoded strings |  | 
| 319 for some reason, then its characters are regarded as \fBlatin1\fR for perl |  | 
| 320 (because it does not concern with your \f(CW$encoding\fR). |  | 
| 321 You \fBcannot\fR use \f(CW\*(C`encode_json\*(C'\fR nor \f(CW\*(C`JSON\*(C'\fR mo
      dule object with \f(CW\*(C`utf8\*(C'\fR enable. |  | 
| 322 Instead of them, you use \f(CW\*(C`JSON\*(C'\fR module object with \f(CW\*(C`utf
      8\*(C'\fR disable. |  | 
| 323 Note that the resulted text is a \s-1UNICODE\s0 string but no problem to print i
      t. |  | 
| 324 .PP |  | 
| 325 .Vb 4 |  | 
| 326 \&  # $perl_scalar contains $encoding encoded string values |  | 
| 327 \&  $unicode_json_text = $json\->utf8(0)\->encode( $perl_scalar ); |  | 
| 328 \&  # $unicode_json_text consists of characters less than 0x100 |  | 
| 329 \&  print $unicode_json_text; |  | 
| 330 .Ve |  | 
| 331 .PP |  | 
| 332 Or \f(CW\*(C`decode $encoding\*(C'\fR all string values and \f(CW\*(C`encode_jso
      n\*(C'\fR: |  | 
| 333 .PP |  | 
| 334 .Vb 3 |  | 
| 335 \&  $perl_scalar\->{ foo } = decode( $encoding, $perl_scalar\->{ foo } ); |  | 
| 336 \&  # ... do it to each string values, then encode_json |  | 
| 337 \&  $json_text = encode_json( $perl_scalar ); |  | 
| 338 .Ve |  | 
| 339 .PP |  | 
| 340 This method is a proper way but probably not efficient. |  | 
| 341 .PP |  | 
| 342 See to Encode, perluniintro. |  | 
| 343 .SH "METHODS" |  | 
| 344 .IX Header "METHODS" |  | 
| 345 Basically, check to \s-1JSON\s0 or \s-1JSON::XS\s0. |  | 
| 346 .SS "new" |  | 
| 347 .IX Subsection "new" |  | 
| 348 .Vb 1 |  | 
| 349 \&    $json = JSON::PP\->new |  | 
| 350 .Ve |  | 
| 351 .PP |  | 
| 352 Returns a new \s-1JSON::PP\s0 object that can be used to de/encode \s-1JSON\s0 |  | 
| 353 strings. |  | 
| 354 .PP |  | 
| 355 All boolean flags described below are by default \fIdisabled\fR. |  | 
| 356 .PP |  | 
| 357 The mutators for flags all return the \s-1JSON\s0 object again and thus calls ca
      n |  | 
| 358 be chained: |  | 
| 359 .PP |  | 
| 360 .Vb 2 |  | 
| 361 \&   my $json = JSON::PP\->new\->utf8\->space_after\->encode({a => [1,2]}) |  | 
| 362 \&   => {"a": [1, 2]} |  | 
| 363 .Ve |  | 
| 364 .SS "ascii" |  | 
| 365 .IX Subsection "ascii" |  | 
| 366 .Vb 1 |  | 
| 367 \&    $json = $json\->ascii([$enable]) |  | 
| 368 \& |  | 
| 369 \&    $enabled = $json\->get_ascii |  | 
| 370 .Ve |  | 
| 371 .PP |  | 
| 372 If \f(CW$enable\fR is true (or missing), then the encode method will not generat
      e characters outside |  | 
| 373 the code range 0..127. Any Unicode characters outside that range will be escaped
       using either |  | 
| 374 a single \euXXXX or a double \euHHHH\euLLLLL escape sequence, as per \s-1RFC4627
      \s0. |  | 
| 375 (See to \*(L"OBJECT-ORIENTED \s-1INTERFACE\s0\*(R" in \s-1JSON::XS\s0). |  | 
| 376 .PP |  | 
| 377 In Perl 5.005, there is no character having high value (more than 255). |  | 
| 378 See to \*(L"\s-1UNICODE\s0 \s-1HANDLING\s0 \s-1ON\s0 \s-1PERLS\s0\*(R". |  | 
| 379 .PP |  | 
| 380 If \f(CW$enable\fR is false, then the encode method will not escape Unicode char
      acters unless |  | 
| 381 required by the \s-1JSON\s0 syntax or other flags. This results in a faster and 
      more compact format. |  | 
| 382 .PP |  | 
| 383 .Vb 2 |  | 
| 384 \&  JSON::PP\->new\->ascii(1)\->encode([chr 0x10401]) |  | 
| 385 \&  => ["\eud801\eudc01"] |  | 
| 386 .Ve |  | 
| 387 .SS "latin1" |  | 
| 388 .IX Subsection "latin1" |  | 
| 389 .Vb 1 |  | 
| 390 \&    $json = $json\->latin1([$enable]) |  | 
| 391 \& |  | 
| 392 \&    $enabled = $json\->get_latin1 |  | 
| 393 .Ve |  | 
| 394 .PP |  | 
| 395 If \f(CW$enable\fR is true (or missing), then the encode method will encode the 
      resulting \s-1JSON\s0 |  | 
| 396 text as latin1 (or iso\-8859\-1), escaping any characters outside the code range
       0..255. |  | 
| 397 .PP |  | 
| 398 If \f(CW$enable\fR is false, then the encode method will not escape Unicode char
      acters |  | 
| 399 unless required by the \s-1JSON\s0 syntax or other flags. |  | 
| 400 .PP |  | 
| 401 .Vb 2 |  | 
| 402 \&  JSON::XS\->new\->latin1\->encode (["\ex{89}\ex{abc}"] |  | 
| 403 \&  => ["\ex{89}\e\eu0abc"]    # (perl syntax, U+abc escaped, U+89 not) |  | 
| 404 .Ve |  | 
| 405 .PP |  | 
| 406 See to \*(L"\s-1UNICODE\s0 \s-1HANDLING\s0 \s-1ON\s0 \s-1PERLS\s0\*(R". |  | 
| 407 .SS "utf8" |  | 
| 408 .IX Subsection "utf8" |  | 
| 409 .Vb 1 |  | 
| 410 \&    $json = $json\->utf8([$enable]) |  | 
| 411 \& |  | 
| 412 \&    $enabled = $json\->get_utf8 |  | 
| 413 .Ve |  | 
| 414 .PP |  | 
| 415 If \f(CW$enable\fR is true (or missing), then the encode method will encode the 
      \s-1JSON\s0 result |  | 
| 416 into \s-1UTF\-8\s0, as required by many protocols, while the decode method expec
      ts to be handled |  | 
| 417 an UTF\-8\-encoded string. Please note that UTF\-8\-encoded strings do not conta
      in any |  | 
| 418 characters outside the range 0..255, they are thus useful for bytewise/binary I/
      O. |  | 
| 419 .PP |  | 
| 420 (In Perl 5.005, any character outside the range 0..255 does not exist. |  | 
| 421 See to \*(L"\s-1UNICODE\s0 \s-1HANDLING\s0 \s-1ON\s0 \s-1PERLS\s0\*(R".) |  | 
| 422 .PP |  | 
| 423 In future versions, enabling this option might enable autodetection of the \s-1U
      TF\-16\s0 and \s-1UTF\-32\s0 |  | 
| 424 encoding families, as described in \s-1RFC4627\s0. |  | 
| 425 .PP |  | 
| 426 If \f(CW$enable\fR is false, then the encode method will return the \s-1JSON\s0 
      string as a (non-encoded) |  | 
| 427 Unicode string, while decode expects thus a Unicode string. Any decoding or enco
      ding |  | 
| 428 (e.g. to \s-1UTF\-8\s0 or \s-1UTF\-16\s0) needs to be done yourself, e.g. using 
      the Encode module. |  | 
| 429 .PP |  | 
| 430 Example, output UTF\-16BE\-encoded \s-1JSON:\s0 |  | 
| 431 .PP |  | 
| 432 .Vb 2 |  | 
| 433 \&  use Encode; |  | 
| 434 \&  $jsontext = encode "UTF\-16BE", JSON::PP\->new\->encode ($object); |  | 
| 435 .Ve |  | 
| 436 .PP |  | 
| 437 Example, decode UTF\-32LE\-encoded \s-1JSON:\s0 |  | 
| 438 .PP |  | 
| 439 .Vb 2 |  | 
| 440 \&  use Encode; |  | 
| 441 \&  $object = JSON::PP\->new\->decode (decode "UTF\-32LE", $jsontext); |  | 
| 442 .Ve |  | 
| 443 .SS "pretty" |  | 
| 444 .IX Subsection "pretty" |  | 
| 445 .Vb 1 |  | 
| 446 \&    $json = $json\->pretty([$enable]) |  | 
| 447 .Ve |  | 
| 448 .PP |  | 
| 449 This enables (or disables) all of the \f(CW\*(C`indent\*(C'\fR, \f(CW\*(C`space_
      before\*(C'\fR and |  | 
| 450 \&\f(CW\*(C`space_after\*(C'\fR flags in one call to generate the most readable |  | 
| 451 (or most compact) form possible. |  | 
| 452 .PP |  | 
| 453 Equivalent to: |  | 
| 454 .PP |  | 
| 455 .Vb 1 |  | 
| 456 \&   $json\->indent\->space_before\->space_after |  | 
| 457 .Ve |  | 
| 458 .SS "indent" |  | 
| 459 .IX Subsection "indent" |  | 
| 460 .Vb 1 |  | 
| 461 \&    $json = $json\->indent([$enable]) |  | 
| 462 \& |  | 
| 463 \&    $enabled = $json\->get_indent |  | 
| 464 .Ve |  | 
| 465 .PP |  | 
| 466 The default indent space length is three. |  | 
| 467 You can use \f(CW\*(C`indent_length\*(C'\fR to change the length. |  | 
| 468 .SS "space_before" |  | 
| 469 .IX Subsection "space_before" |  | 
| 470 .Vb 1 |  | 
| 471 \&    $json = $json\->space_before([$enable]) |  | 
| 472 \& |  | 
| 473 \&    $enabled = $json\->get_space_before |  | 
| 474 .Ve |  | 
| 475 .PP |  | 
| 476 If \f(CW$enable\fR is true (or missing), then the \f(CW\*(C`encode\*(C'\fR metho
      d will add an extra |  | 
| 477 optional space before the \f(CW\*(C`:\*(C'\fR separating keys from values in \s-
      1JSON\s0 objects. |  | 
| 478 .PP |  | 
| 479 If \f(CW$enable\fR is false, then the \f(CW\*(C`encode\*(C'\fR method will not a
      dd any extra |  | 
| 480 space at those places. |  | 
| 481 .PP |  | 
| 482 This setting has no effect when decoding \s-1JSON\s0 texts. |  | 
| 483 .PP |  | 
| 484 Example, space_before enabled, space_after and indent disabled: |  | 
| 485 .PP |  | 
| 486 .Vb 1 |  | 
| 487 \&   {"key" :"value"} |  | 
| 488 .Ve |  | 
| 489 .SS "space_after" |  | 
| 490 .IX Subsection "space_after" |  | 
| 491 .Vb 1 |  | 
| 492 \&    $json = $json\->space_after([$enable]) |  | 
| 493 \& |  | 
| 494 \&    $enabled = $json\->get_space_after |  | 
| 495 .Ve |  | 
| 496 .PP |  | 
| 497 If \f(CW$enable\fR is true (or missing), then the \f(CW\*(C`encode\*(C'\fR metho
      d will add an extra |  | 
| 498 optional space after the \f(CW\*(C`:\*(C'\fR separating keys from values in \s-1
      JSON\s0 objects |  | 
| 499 and extra whitespace after the \f(CW\*(C`,\*(C'\fR separating key-value pairs an
      d array |  | 
| 500 members. |  | 
| 501 .PP |  | 
| 502 If \f(CW$enable\fR is false, then the \f(CW\*(C`encode\*(C'\fR method will not a
      dd any extra |  | 
| 503 space at those places. |  | 
| 504 .PP |  | 
| 505 This setting has no effect when decoding \s-1JSON\s0 texts. |  | 
| 506 .PP |  | 
| 507 Example, space_before and indent disabled, space_after enabled: |  | 
| 508 .PP |  | 
| 509 .Vb 1 |  | 
| 510 \&   {"key": "value"} |  | 
| 511 .Ve |  | 
| 512 .SS "relaxed" |  | 
| 513 .IX Subsection "relaxed" |  | 
| 514 .Vb 1 |  | 
| 515 \&    $json = $json\->relaxed([$enable]) |  | 
| 516 \& |  | 
| 517 \&    $enabled = $json\->get_relaxed |  | 
| 518 .Ve |  | 
| 519 .PP |  | 
| 520 If \f(CW$enable\fR is true (or missing), then \f(CW\*(C`decode\*(C'\fR will acce
      pt some |  | 
| 521 extensions to normal \s-1JSON\s0 syntax (see below). \f(CW\*(C`encode\*(C'\fR wi
      ll not be |  | 
| 522 affected in anyway. \fIBe aware that this option makes you accept invalid |  | 
| 523 \&\s-1JSON\s0 texts as if they were valid!\fR. I suggest only to use this option
       to |  | 
| 524 parse application-specific files written by humans (configuration files, |  | 
| 525 resource files etc.) |  | 
| 526 .PP |  | 
| 527 If \f(CW$enable\fR is false (the default), then \f(CW\*(C`decode\*(C'\fR will on
      ly accept |  | 
| 528 valid \s-1JSON\s0 texts. |  | 
| 529 .PP |  | 
| 530 Currently accepted extensions are: |  | 
| 531 .IP "\(bu" 4 |  | 
| 532 list items can have an end-comma |  | 
| 533 .Sp |  | 
| 534 \&\s-1JSON\s0 \fIseparates\fR array elements and key-value pairs with commas. Th
      is |  | 
| 535 can be annoying if you write \s-1JSON\s0 texts manually and want to be able to |  | 
| 536 quickly append elements, so this extension accepts comma at the end of |  | 
| 537 such items not just between them: |  | 
| 538 .Sp |  | 
| 539 .Vb 8 |  | 
| 540 \&   [ |  | 
| 541 \&      1, |  | 
| 542 \&      2, <\- this comma not normally allowed |  | 
| 543 \&   ] |  | 
| 544 \&   { |  | 
| 545 \&      "k1": "v1", |  | 
| 546 \&      "k2": "v2", <\- this comma not normally allowed |  | 
| 547 \&   } |  | 
| 548 .Ve |  | 
| 549 .IP "\(bu" 4 |  | 
| 550 shell-style '#'\-comments |  | 
| 551 .Sp |  | 
| 552 Whenever \s-1JSON\s0 allows whitespace, shell-style comments are additionally |  | 
| 553 allowed. They are terminated by the first carriage-return or line-feed |  | 
| 554 character, after which more white-space and comments are allowed. |  | 
| 555 .Sp |  | 
| 556 .Vb 4 |  | 
| 557 \&  [ |  | 
| 558 \&     1, # this comment not allowed in JSON |  | 
| 559 \&        # neither this one... |  | 
| 560 \&  ] |  | 
| 561 .Ve |  | 
| 562 .SS "canonical" |  | 
| 563 .IX Subsection "canonical" |  | 
| 564 .Vb 1 |  | 
| 565 \&    $json = $json\->canonical([$enable]) |  | 
| 566 \& |  | 
| 567 \&    $enabled = $json\->get_canonical |  | 
| 568 .Ve |  | 
| 569 .PP |  | 
| 570 If \f(CW$enable\fR is true (or missing), then the \f(CW\*(C`encode\*(C'\fR metho
      d will output \s-1JSON\s0 objects |  | 
| 571 by sorting their keys. This is adding a comparatively high overhead. |  | 
| 572 .PP |  | 
| 573 If \f(CW$enable\fR is false, then the \f(CW\*(C`encode\*(C'\fR method will outpu
      t key-value |  | 
| 574 pairs in the order Perl stores them (which will likely change between runs |  | 
| 575 of the same script). |  | 
| 576 .PP |  | 
| 577 This option is useful if you want the same data structure to be encoded as |  | 
| 578 the same \s-1JSON\s0 text (given the same overall settings). If it is disabled, |  | 
| 579 the same hash might be encoded differently even if contains the same data, |  | 
| 580 as key-value pairs have no inherent ordering in Perl. |  | 
| 581 .PP |  | 
| 582 This setting has no effect when decoding \s-1JSON\s0 texts. |  | 
| 583 .PP |  | 
| 584 If you want your own sorting routine, you can give a code reference |  | 
| 585 or a subroutine name to \f(CW\*(C`sort_by\*(C'\fR. See to \f(CW\*(C`JSON::PP OWN
       METHODS\*(C'\fR. |  | 
| 586 .SS "allow_nonref" |  | 
| 587 .IX Subsection "allow_nonref" |  | 
| 588 .Vb 1 |  | 
| 589 \&    $json = $json\->allow_nonref([$enable]) |  | 
| 590 \& |  | 
| 591 \&    $enabled = $json\->get_allow_nonref |  | 
| 592 .Ve |  | 
| 593 .PP |  | 
| 594 If \f(CW$enable\fR is true (or missing), then the \f(CW\*(C`encode\*(C'\fR metho
      d can convert a |  | 
| 595 non-reference into its corresponding string, number or null \s-1JSON\s0 value, |  | 
| 596 which is an extension to \s-1RFC4627\s0. Likewise, \f(CW\*(C`decode\*(C'\fR will
       accept those \s-1JSON\s0 |  | 
| 597 values instead of croaking. |  | 
| 598 .PP |  | 
| 599 If \f(CW$enable\fR is false, then the \f(CW\*(C`encode\*(C'\fR method will croak
       if it isn't |  | 
| 600 passed an arrayref or hashref, as \s-1JSON\s0 texts must either be an object |  | 
| 601 or array. Likewise, \f(CW\*(C`decode\*(C'\fR will croak if given something that 
      is not a |  | 
| 602 \&\s-1JSON\s0 object or array. |  | 
| 603 .PP |  | 
| 604 .Vb 2 |  | 
| 605 \&   JSON::PP\->new\->allow_nonref\->encode ("Hello, World!") |  | 
| 606 \&   => "Hello, World!" |  | 
| 607 .Ve |  | 
| 608 .SS "allow_unknown" |  | 
| 609 .IX Subsection "allow_unknown" |  | 
| 610 .Vb 1 |  | 
| 611 \&    $json = $json\->allow_unknown ([$enable]) |  | 
| 612 \& |  | 
| 613 \&    $enabled = $json\->get_allow_unknown |  | 
| 614 .Ve |  | 
| 615 .PP |  | 
| 616 If \f(CW$enable\fR is true (or missing), then \*(L"encode\*(R" will *not* throw 
      an |  | 
| 617 exception when it encounters values it cannot represent in \s-1JSON\s0 (for |  | 
| 618 example, filehandles) but instead will encode a \s-1JSON\s0 \*(L"null\*(R" value
      . |  | 
| 619 Note that blessed objects are not included here and are handled |  | 
| 620 separately by c<allow_nonref>. |  | 
| 621 .PP |  | 
| 622 If \f(CW$enable\fR is false (the default), then \*(L"encode\*(R" will throw an |  | 
| 623 exception when it encounters anything it cannot encode as \s-1JSON\s0. |  | 
| 624 .PP |  | 
| 625 This option does not affect \*(L"decode\*(R" in any way, and it is |  | 
| 626 recommended to leave it off unless you know your communications |  | 
| 627 partner. |  | 
| 628 .SS "allow_blessed" |  | 
| 629 .IX Subsection "allow_blessed" |  | 
| 630 .Vb 1 |  | 
| 631 \&    $json = $json\->allow_blessed([$enable]) |  | 
| 632 \& |  | 
| 633 \&    $enabled = $json\->get_allow_blessed |  | 
| 634 .Ve |  | 
| 635 .PP |  | 
| 636 If \f(CW$enable\fR is true (or missing), then the \f(CW\*(C`encode\*(C'\fR metho
      d will not |  | 
| 637 barf when it encounters a blessed reference. Instead, the value of the |  | 
| 638 \&\fBconvert_blessed\fR option will decide whether \f(CW\*(C`null\*(C'\fR (\f(CW
      \*(C`convert_blessed\*(C'\fR |  | 
| 639 disabled or no \f(CW\*(C`TO_JSON\*(C'\fR method found) or a representation of th
      e |  | 
| 640 object (\f(CW\*(C`convert_blessed\*(C'\fR enabled and \f(CW\*(C`TO_JSON\*(C'\fR 
      method found) is being |  | 
| 641 encoded. Has no effect on \f(CW\*(C`decode\*(C'\fR. |  | 
| 642 .PP |  | 
| 643 If \f(CW$enable\fR is false (the default), then \f(CW\*(C`encode\*(C'\fR will th
      row an |  | 
| 644 exception when it encounters a blessed object. |  | 
| 645 .SS "convert_blessed" |  | 
| 646 .IX Subsection "convert_blessed" |  | 
| 647 .Vb 1 |  | 
| 648 \&    $json = $json\->convert_blessed([$enable]) |  | 
| 649 \& |  | 
| 650 \&    $enabled = $json\->get_convert_blessed |  | 
| 651 .Ve |  | 
| 652 .PP |  | 
| 653 If \f(CW$enable\fR is true (or missing), then \f(CW\*(C`encode\*(C'\fR, upon enc
      ountering a |  | 
| 654 blessed object, will check for the availability of the \f(CW\*(C`TO_JSON\*(C'\fR
       method |  | 
| 655 on the object's class. If found, it will be called in scalar context |  | 
| 656 and the resulting scalar will be encoded instead of the object. If no |  | 
| 657 \&\f(CW\*(C`TO_JSON\*(C'\fR method is found, the value of \f(CW\*(C`allow_blesse
      d\*(C'\fR will decide what |  | 
| 658 to do. |  | 
| 659 .PP |  | 
| 660 The \f(CW\*(C`TO_JSON\*(C'\fR method may safely call die if it wants. If \f(CW\*
      (C`TO_JSON\*(C'\fR |  | 
| 661 returns other blessed objects, those will be handled in the same |  | 
| 662 way. \f(CW\*(C`TO_JSON\*(C'\fR must take care of not causing an endless recursio
      n cycle |  | 
| 663 (== crash) in this case. The name of \f(CW\*(C`TO_JSON\*(C'\fR was chosen becaus
      e other |  | 
| 664 methods called by the Perl core (== not by the user of the object) are |  | 
| 665 usually in upper case letters and to avoid collisions with the \f(CW\*(C`to_json
      \*(C'\fR |  | 
| 666 function or method. |  | 
| 667 .PP |  | 
| 668 This setting does not yet influence \f(CW\*(C`decode\*(C'\fR in any way. |  | 
| 669 .PP |  | 
| 670 If \f(CW$enable\fR is false, then the \f(CW\*(C`allow_blessed\*(C'\fR setting wi
      ll decide what |  | 
| 671 to do when a blessed object is found. |  | 
| 672 .SS "filter_json_object" |  | 
| 673 .IX Subsection "filter_json_object" |  | 
| 674 .Vb 1 |  | 
| 675 \&    $json = $json\->filter_json_object([$coderef]) |  | 
| 676 .Ve |  | 
| 677 .PP |  | 
| 678 When \f(CW$coderef\fR is specified, it will be called from \f(CW\*(C`decode\*(C'
      \fR each |  | 
| 679 time it decodes a \s-1JSON\s0 object. The only argument passed to the coderef |  | 
| 680 is a reference to the newly-created hash. If the code references returns |  | 
| 681 a single scalar (which need not be a reference), this value |  | 
| 682 (i.e. a copy of that scalar to avoid aliasing) is inserted into the |  | 
| 683 deserialised data structure. If it returns an empty list |  | 
| 684 (\s-1NOTE:\s0 \fInot\fR \f(CW\*(C`undef\*(C'\fR, which is a valid scalar), the o
      riginal deserialised |  | 
| 685 hash will be inserted. This setting can slow down decoding considerably. |  | 
| 686 .PP |  | 
| 687 When \f(CW$coderef\fR is omitted or undefined, any existing callback will |  | 
| 688 be removed and \f(CW\*(C`decode\*(C'\fR will not change the deserialised hash in
       any |  | 
| 689 way. |  | 
| 690 .PP |  | 
| 691 Example, convert all \s-1JSON\s0 objects into the integer 5: |  | 
| 692 .PP |  | 
| 693 .Vb 6 |  | 
| 694 \&   my $js = JSON::PP\->new\->filter_json_object (sub { 5 }); |  | 
| 695 \&   # returns [5] |  | 
| 696 \&   $js\->decode (\*(Aq[{}]\*(Aq); # the given subroutine takes a hash referenc
      e. |  | 
| 697 \&   # throw an exception because allow_nonref is not enabled |  | 
| 698 \&   # so a lone 5 is not allowed. |  | 
| 699 \&   $js\->decode (\*(Aq{"a":1, "b":2}\*(Aq); |  | 
| 700 .Ve |  | 
| 701 .SS "filter_json_single_key_object" |  | 
| 702 .IX Subsection "filter_json_single_key_object" |  | 
| 703 .Vb 1 |  | 
| 704 \&    $json = $json\->filter_json_single_key_object($key [=> $coderef]) |  | 
| 705 .Ve |  | 
| 706 .PP |  | 
| 707 Works remotely similar to \f(CW\*(C`filter_json_object\*(C'\fR, but is only call
      ed for |  | 
| 708 \&\s-1JSON\s0 objects having a single key named \f(CW$key\fR. |  | 
| 709 .PP |  | 
| 710 This \f(CW$coderef\fR is called before the one specified via |  | 
| 711 \&\f(CW\*(C`filter_json_object\*(C'\fR, if any. It gets passed the single value 
      in the \s-1JSON\s0 |  | 
| 712 object. If it returns a single value, it will be inserted into the data |  | 
| 713 structure. If it returns nothing (not even \f(CW\*(C`undef\*(C'\fR but the empty
       list), |  | 
| 714 the callback from \f(CW\*(C`filter_json_object\*(C'\fR will be called next, as i
      f no |  | 
| 715 single-key callback were specified. |  | 
| 716 .PP |  | 
| 717 If \f(CW$coderef\fR is omitted or undefined, the corresponding callback will be |  | 
| 718 disabled. There can only ever be one callback for a given key. |  | 
| 719 .PP |  | 
| 720 As this callback gets called less often then the \f(CW\*(C`filter_json_object\*(
      C'\fR |  | 
| 721 one, decoding speed will not usually suffer as much. Therefore, single-key |  | 
| 722 objects make excellent targets to serialise Perl objects into, especially |  | 
| 723 as single-key \s-1JSON\s0 objects are as close to the type-tagged value concept |  | 
| 724 as \s-1JSON\s0 gets (it's basically an \s-1ID/VALUE\s0 tuple). Of course, \s-1JS
      ON\s0 does not |  | 
| 725 support this in any way, so you need to make sure your data never looks |  | 
| 726 like a serialised Perl hash. |  | 
| 727 .PP |  | 
| 728 Typical names for the single object key are \f(CW\*(C`_\|_class_whatever_\|_\*(C
      '\fR, or |  | 
| 729 \&\f(CW\*(C`$_\|_dollars_are_rarely_used_\|_$\*(C'\fR or \f(CW\*(C`}ugly_brace_p
      lacement\*(C'\fR, or even |  | 
| 730 things like \f(CW\*(C`_\|_class_md5sum(classname)_\|_\*(C'\fR, to reduce the ris
      k of clashing |  | 
| 731 with real hashes. |  | 
| 732 .PP |  | 
| 733 Example, decode \s-1JSON\s0 objects of the form \f(CW\*(C`{ "_\|_widget_\|_" => 
      <id> }\*(C'\fR |  | 
| 734 into the corresponding \f(CW$WIDGET{<id>}\fR object: |  | 
| 735 .PP |  | 
| 736 .Vb 7 |  | 
| 737 \&   # return whatever is in $WIDGET{5}: |  | 
| 738 \&   JSON::PP |  | 
| 739 \&      \->new |  | 
| 740 \&      \->filter_json_single_key_object (_\|_widget_\|_ => sub { |  | 
| 741 \&            $WIDGET{ $_[0] } |  | 
| 742 \&         }) |  | 
| 743 \&      \->decode (\*(Aq{"_\|_widget_\|_": 5\*(Aq) |  | 
| 744 \& |  | 
| 745 \&   # this can be used with a TO_JSON method in some "widget" class |  | 
| 746 \&   # for serialisation to json: |  | 
| 747 \&   sub WidgetBase::TO_JSON { |  | 
| 748 \&      my ($self) = @_; |  | 
| 749 \& |  | 
| 750 \&      unless ($self\->{id}) { |  | 
| 751 \&         $self\->{id} = ..get..some..id..; |  | 
| 752 \&         $WIDGET{$self\->{id}} = $self; |  | 
| 753 \&      } |  | 
| 754 \& |  | 
| 755 \&      { _\|_widget_\|_ => $self\->{id} } |  | 
| 756 \&   } |  | 
| 757 .Ve |  | 
| 758 .SS "shrink" |  | 
| 759 .IX Subsection "shrink" |  | 
| 760 .Vb 1 |  | 
| 761 \&    $json = $json\->shrink([$enable]) |  | 
| 762 \& |  | 
| 763 \&    $enabled = $json\->get_shrink |  | 
| 764 .Ve |  | 
| 765 .PP |  | 
| 766 In \s-1JSON::XS\s0, this flag resizes strings generated by either |  | 
| 767 \&\f(CW\*(C`encode\*(C'\fR or \f(CW\*(C`decode\*(C'\fR to their minimum size pos
      sible. |  | 
| 768 It will also try to downgrade any strings to octet-form if possible. |  | 
| 769 .PP |  | 
| 770 In \s-1JSON::PP\s0, it is noop about resizing strings but tries |  | 
| 771 \&\f(CW\*(C`utf8::downgrade\*(C'\fR to the returned string by \f(CW\*(C`encode\*
      (C'\fR. |  | 
| 772 See to utf8. |  | 
| 773 .PP |  | 
| 774 See to \*(L"OBJECT-ORIENTED \s-1INTERFACE\s0\*(R" in \s-1JSON::XS\s0 |  | 
| 775 .SS "max_depth" |  | 
| 776 .IX Subsection "max_depth" |  | 
| 777 .Vb 1 |  | 
| 778 \&    $json = $json\->max_depth([$maximum_nesting_depth]) |  | 
| 779 \& |  | 
| 780 \&    $max_depth = $json\->get_max_depth |  | 
| 781 .Ve |  | 
| 782 .PP |  | 
| 783 Sets the maximum nesting level (default \f(CW512\fR) accepted while encoding |  | 
| 784 or decoding. If a higher nesting level is detected in \s-1JSON\s0 text or a Perl |  | 
| 785 data structure, then the encoder and decoder will stop and croak at that |  | 
| 786 point. |  | 
| 787 .PP |  | 
| 788 Nesting level is defined by number of hash\- or arrayrefs that the encoder |  | 
| 789 needs to traverse to reach a given point or the number of \f(CW\*(C`{\*(C'\fR or
       \f(CW\*(C`[\*(C'\fR |  | 
| 790 characters without their matching closing parenthesis crossed to reach a |  | 
| 791 given character in a string. |  | 
| 792 .PP |  | 
| 793 If no argument is given, the highest possible setting will be used, which |  | 
| 794 is rarely useful. |  | 
| 795 .PP |  | 
| 796 See \*(L"\s-1SSECURITY\s0 \s-1CONSIDERATIONS\s0\*(R" in \s-1JSON::XS\s0 for more
       info on why this is useful. |  | 
| 797 .PP |  | 
| 798 When a large value (100 or more) was set and it de/encodes a deep nested object/
      text, |  | 
| 799 it may raise a warning 'Deep recursion on subroutine' at the perl runtime phase. |  | 
| 800 .SS "max_size" |  | 
| 801 .IX Subsection "max_size" |  | 
| 802 .Vb 1 |  | 
| 803 \&    $json = $json\->max_size([$maximum_string_size]) |  | 
| 804 \& |  | 
| 805 \&    $max_size = $json\->get_max_size |  | 
| 806 .Ve |  | 
| 807 .PP |  | 
| 808 Set the maximum length a \s-1JSON\s0 text may have (in bytes) where decoding is |  | 
| 809 being attempted. The default is \f(CW0\fR, meaning no limit. When \f(CW\*(C`deco
      de\*(C'\fR |  | 
| 810 is called on a string that is longer then this many bytes, it will not |  | 
| 811 attempt to decode the string but throw an exception. This setting has no |  | 
| 812 effect on \f(CW\*(C`encode\*(C'\fR (yet). |  | 
| 813 .PP |  | 
| 814 If no argument is given, the limit check will be deactivated (same as when |  | 
| 815 \&\f(CW0\fR is specified). |  | 
| 816 .PP |  | 
| 817 See \*(L"\s-1SECURITY\s0 \s-1CONSIDERATIONS\s0\*(R" in \s-1JSON::XS\s0 for more 
      info on why this is useful. |  | 
| 818 .SS "encode" |  | 
| 819 .IX Subsection "encode" |  | 
| 820 .Vb 1 |  | 
| 821 \&    $json_text = $json\->encode($perl_scalar) |  | 
| 822 .Ve |  | 
| 823 .PP |  | 
| 824 Converts the given Perl data structure (a simple scalar or a reference |  | 
| 825 to a hash or array) to its \s-1JSON\s0 representation. Simple scalars will be |  | 
| 826 converted into \s-1JSON\s0 string or number sequences, while references to array
      s |  | 
| 827 become \s-1JSON\s0 arrays and references to hashes become \s-1JSON\s0 objects. U
      ndefined |  | 
| 828 Perl values (e.g. \f(CW\*(C`undef\*(C'\fR) become \s-1JSON\s0 \f(CW\*(C`null\*(C
      '\fR values. |  | 
| 829 References to the integers \f(CW0\fR and \f(CW1\fR are converted into \f(CW\*(C`
      true\*(C'\fR and \f(CW\*(C`false\*(C'\fR. |  | 
| 830 .SS "decode" |  | 
| 831 .IX Subsection "decode" |  | 
| 832 .Vb 1 |  | 
| 833 \&    $perl_scalar = $json\->decode($json_text) |  | 
| 834 .Ve |  | 
| 835 .PP |  | 
| 836 The opposite of \f(CW\*(C`encode\*(C'\fR: expects a \s-1JSON\s0 text and tries t
      o parse it, |  | 
| 837 returning the resulting simple scalar or reference. Croaks on error. |  | 
| 838 .PP |  | 
| 839 \&\s-1JSON\s0 numbers and strings become simple Perl scalars. \s-1JSON\s0 arrays
       become |  | 
| 840 Perl arrayrefs and \s-1JSON\s0 objects become Perl hashrefs. \f(CW\*(C`true\*(C'
      \fR becomes |  | 
| 841 \&\f(CW1\fR (\f(CW\*(C`JSON::true\*(C'\fR), \f(CW\*(C`false\*(C'\fR becomes \f(C
      W0\fR (\f(CW\*(C`JSON::false\*(C'\fR) and |  | 
| 842 \&\f(CW\*(C`null\*(C'\fR becomes \f(CW\*(C`undef\*(C'\fR. |  | 
| 843 .SS "decode_prefix" |  | 
| 844 .IX Subsection "decode_prefix" |  | 
| 845 .Vb 1 |  | 
| 846 \&    ($perl_scalar, $characters) = $json\->decode_prefix($json_text) |  | 
| 847 .Ve |  | 
| 848 .PP |  | 
| 849 This works like the \f(CW\*(C`decode\*(C'\fR method, but instead of raising an e
      xception |  | 
| 850 when there is trailing garbage after the first \s-1JSON\s0 object, it will |  | 
| 851 silently stop parsing there and return the number of characters consumed |  | 
| 852 so far. |  | 
| 853 .PP |  | 
| 854 .Vb 2 |  | 
| 855 \&   JSON\->new\->decode_prefix ("[1] the tail") |  | 
| 856 \&   => ([], 3) |  | 
| 857 .Ve |  | 
| 858 .SH "INCREMENTAL PARSING" |  | 
| 859 .IX Header "INCREMENTAL PARSING" |  | 
| 860 Most of this section are copied and modified from \*(L"\s-1INCREMENTAL\s0 \s-1PA
      RSING\s0\*(R" in \s-1JSON::XS\s0. |  | 
| 861 .PP |  | 
| 862 In some cases, there is the need for incremental parsing of \s-1JSON\s0 texts. |  | 
| 863 This module does allow you to parse a \s-1JSON\s0 stream incrementally. |  | 
| 864 It does so by accumulating text until it has a full \s-1JSON\s0 object, which |  | 
| 865 it then can decode. This process is similar to using \f(CW\*(C`decode_prefix\*(C
      '\fR |  | 
| 866 to see if a full \s-1JSON\s0 object is available, but is much more efficient |  | 
| 867 (and can be implemented with a minimum of method calls). |  | 
| 868 .PP |  | 
| 869 This module will only attempt to parse the \s-1JSON\s0 text once it is sure it |  | 
| 870 has enough text to get a decisive result, using a very simple but |  | 
| 871 truly incremental parser. This means that it sometimes won't stop as |  | 
| 872 early as the full parser, for example, it doesn't detect parenthesis |  | 
| 873 mismatches. The only thing it guarantees is that it starts decoding as |  | 
| 874 soon as a syntactically valid \s-1JSON\s0 text has been seen. This means you nee
      d |  | 
| 875 to set resource limits (e.g. \f(CW\*(C`max_size\*(C'\fR) to ensure the parser wi
      ll stop |  | 
| 876 parsing in the presence if syntax errors. |  | 
| 877 .PP |  | 
| 878 The following methods implement this incremental parser. |  | 
| 879 .SS "incr_parse" |  | 
| 880 .IX Subsection "incr_parse" |  | 
| 881 .Vb 1 |  | 
| 882 \&    $json\->incr_parse( [$string] ) # void context |  | 
| 883 \& |  | 
| 884 \&    $obj_or_undef = $json\->incr_parse( [$string] ) # scalar context |  | 
| 885 \& |  | 
| 886 \&    @obj_or_empty = $json\->incr_parse( [$string] ) # list context |  | 
| 887 .Ve |  | 
| 888 .PP |  | 
| 889 This is the central parsing function. It can both append new text and |  | 
| 890 extract objects from the stream accumulated so far (both of these |  | 
| 891 functions are optional). |  | 
| 892 .PP |  | 
| 893 If \f(CW$string\fR is given, then this string is appended to the already |  | 
| 894 existing \s-1JSON\s0 fragment stored in the \f(CW$json\fR object. |  | 
| 895 .PP |  | 
| 896 After that, if the function is called in void context, it will simply |  | 
| 897 return without doing anything further. This can be used to add more text |  | 
| 898 in as many chunks as you want. |  | 
| 899 .PP |  | 
| 900 If the method is called in scalar context, then it will try to extract |  | 
| 901 exactly \fIone\fR \s-1JSON\s0 object. If that is successful, it will return this |  | 
| 902 object, otherwise it will return \f(CW\*(C`undef\*(C'\fR. If there is a parse er
      ror, |  | 
| 903 this method will croak just as \f(CW\*(C`decode\*(C'\fR would do (one can then u
      se |  | 
| 904 \&\f(CW\*(C`incr_skip\*(C'\fR to skip the erroneous part). This is the most comm
      on way of |  | 
| 905 using the method. |  | 
| 906 .PP |  | 
| 907 And finally, in list context, it will try to extract as many objects |  | 
| 908 from the stream as it can find and return them, or the empty list |  | 
| 909 otherwise. For this to work, there must be no separators between the \s-1JSON\s0 |  | 
| 910 objects or arrays, instead they must be concatenated back-to-back. If |  | 
| 911 an error occurs, an exception will be raised as in the scalar context |  | 
| 912 case. Note that in this case, any previously-parsed \s-1JSON\s0 texts will be |  | 
| 913 lost. |  | 
| 914 .PP |  | 
| 915 Example: Parse some \s-1JSON\s0 arrays/objects in a given string and return them
      . |  | 
| 916 .PP |  | 
| 917 .Vb 1 |  | 
| 918 \&    my @objs = JSON\->new\->incr_parse ("[5][7][1,2]"); |  | 
| 919 .Ve |  | 
| 920 .SS "incr_text" |  | 
| 921 .IX Subsection "incr_text" |  | 
| 922 .Vb 1 |  | 
| 923 \&    $lvalue_string = $json\->incr_text |  | 
| 924 .Ve |  | 
| 925 .PP |  | 
| 926 This method returns the currently stored \s-1JSON\s0 fragment as an lvalue, that |  | 
| 927 is, you can manipulate it. This \fIonly\fR works when a preceding call to |  | 
| 928 \&\f(CW\*(C`incr_parse\*(C'\fR in \fIscalar context\fR successfully returned an 
      object. Under |  | 
| 929 all other circumstances you must not call this function (I mean it. |  | 
| 930 although in simple tests it might actually work, it \fIwill\fR fail under |  | 
| 931 real world conditions). As a special exception, you can also call this |  | 
| 932 method before having parsed anything. |  | 
| 933 .PP |  | 
| 934 This function is useful in two cases: a) finding the trailing text after a |  | 
| 935 \&\s-1JSON\s0 object or b) parsing multiple \s-1JSON\s0 objects separated by non
      -JSON text |  | 
| 936 (such as commas). |  | 
| 937 .PP |  | 
| 938 .Vb 1 |  | 
| 939 \&    $json\->incr_text =~ s/\es*,\es*//; |  | 
| 940 .Ve |  | 
| 941 .PP |  | 
| 942 In Perl 5.005, \f(CW\*(C`lvalue\*(C'\fR attribute is not available. |  | 
| 943 You must write codes like the below: |  | 
| 944 .PP |  | 
| 945 .Vb 3 |  | 
| 946 \&    $string = $json\->incr_text; |  | 
| 947 \&    $string =~ s/\es*,\es*//; |  | 
| 948 \&    $json\->incr_text( $string ); |  | 
| 949 .Ve |  | 
| 950 .SS "incr_skip" |  | 
| 951 .IX Subsection "incr_skip" |  | 
| 952 .Vb 1 |  | 
| 953 \&    $json\->incr_skip |  | 
| 954 .Ve |  | 
| 955 .PP |  | 
| 956 This will reset the state of the incremental parser and will remove the |  | 
| 957 parsed text from the input buffer. This is useful after \f(CW\*(C`incr_parse\*(C
      '\fR |  | 
| 958 died, in which case the input buffer and incremental parser state is left |  | 
| 959 unchanged, to skip the text parsed so far and to reset the parse state. |  | 
| 960 .SS "incr_reset" |  | 
| 961 .IX Subsection "incr_reset" |  | 
| 962 .Vb 1 |  | 
| 963 \&    $json\->incr_reset |  | 
| 964 .Ve |  | 
| 965 .PP |  | 
| 966 This completely resets the incremental parser, that is, after this call, |  | 
| 967 it will be as if the parser had never parsed anything. |  | 
| 968 .PP |  | 
| 969 This is useful if you want to repeatedly parse \s-1JSON\s0 objects and want to |  | 
| 970 ignore any trailing data, which means you have to reset the parser after |  | 
| 971 each successful decode. |  | 
| 972 .PP |  | 
| 973 See to \*(L"\s-1INCREMENTAL\s0 \s-1PARSING\s0\*(R" in \s-1JSON::XS\s0 for exampl
      es. |  | 
| 974 .SH "JSON::PP OWN METHODS" |  | 
| 975 .IX Header "JSON::PP OWN METHODS" |  | 
| 976 .SS "allow_singlequote" |  | 
| 977 .IX Subsection "allow_singlequote" |  | 
| 978 .Vb 1 |  | 
| 979 \&    $json = $json\->allow_singlequote([$enable]) |  | 
| 980 .Ve |  | 
| 981 .PP |  | 
| 982 If \f(CW$enable\fR is true (or missing), then \f(CW\*(C`decode\*(C'\fR will acce
      pt |  | 
| 983 \&\s-1JSON\s0 strings quoted by single quotations that are invalid \s-1JSON\s0 |  | 
| 984 format. |  | 
| 985 .PP |  | 
| 986 .Vb 3 |  | 
| 987 \&    $json\->allow_singlequote\->decode({"foo":\*(Aqbar\*(Aq}); |  | 
| 988 \&    $json\->allow_singlequote\->decode({\*(Aqfoo\*(Aq:"bar"}); |  | 
| 989 \&    $json\->allow_singlequote\->decode({\*(Aqfoo\*(Aq:\*(Aqbar\*(Aq}); |  | 
| 990 .Ve |  | 
| 991 .PP |  | 
| 992 As same as the \f(CW\*(C`relaxed\*(C'\fR option, this option may be used to pars
      e |  | 
| 993 application-specific files written by humans. |  | 
| 994 .SS "allow_barekey" |  | 
| 995 .IX Subsection "allow_barekey" |  | 
| 996 .Vb 1 |  | 
| 997 \&    $json = $json\->allow_barekey([$enable]) |  | 
| 998 .Ve |  | 
| 999 .PP |  | 
| 1000 If \f(CW$enable\fR is true (or missing), then \f(CW\*(C`decode\*(C'\fR will acce
      pt |  | 
| 1001 bare keys of \s-1JSON\s0 object that are invalid \s-1JSON\s0 format. |  | 
| 1002 .PP |  | 
| 1003 As same as the \f(CW\*(C`relaxed\*(C'\fR option, this option may be used to pars
      e |  | 
| 1004 application-specific files written by humans. |  | 
| 1005 .PP |  | 
| 1006 .Vb 1 |  | 
| 1007 \&    $json\->allow_barekey\->decode(\*(Aq{foo:"bar"}\*(Aq); |  | 
| 1008 .Ve |  | 
| 1009 .SS "allow_bignum" |  | 
| 1010 .IX Subsection "allow_bignum" |  | 
| 1011 .Vb 1 |  | 
| 1012 \&    $json = $json\->allow_bignum([$enable]) |  | 
| 1013 .Ve |  | 
| 1014 .PP |  | 
| 1015 If \f(CW$enable\fR is true (or missing), then \f(CW\*(C`decode\*(C'\fR will conv
      ert |  | 
| 1016 the big integer Perl cannot handle as integer into a Math::BigInt |  | 
| 1017 object and convert a floating number (any) into a Math::BigFloat. |  | 
| 1018 .PP |  | 
| 1019 On the contrary, \f(CW\*(C`encode\*(C'\fR converts \f(CW\*(C`Math::BigInt\*(C'\f
      R objects and \f(CW\*(C`Math::BigFloat\*(C'\fR |  | 
| 1020 objects into \s-1JSON\s0 numbers with \f(CW\*(C`allow_blessed\*(C'\fR enable. |  | 
| 1021 .PP |  | 
| 1022 .Vb 4 |  | 
| 1023 \&   $json\->allow_nonref\->allow_blessed\->allow_bignum; |  | 
| 1024 \&   $bigfloat = $json\->decode(\*(Aq2.000000000000000000000000001\*(Aq); |  | 
| 1025 \&   print $json\->encode($bigfloat); |  | 
| 1026 \&   # => 2.000000000000000000000000001 |  | 
| 1027 .Ve |  | 
| 1028 .PP |  | 
| 1029 See to \*(L"\s-1MAPPING\s0\*(R" in \s-1JSON::XS\s0 about the normal conversion o
      f \s-1JSON\s0 number. |  | 
| 1030 .SS "loose" |  | 
| 1031 .IX Subsection "loose" |  | 
| 1032 .Vb 1 |  | 
| 1033 \&    $json = $json\->loose([$enable]) |  | 
| 1034 .Ve |  | 
| 1035 .PP |  | 
| 1036 The unescaped [\ex00\-\ex1f\ex22\ex2f\ex5c] strings are invalid in \s-1JSON\s0 s
      trings |  | 
| 1037 and the module doesn't allow to \f(CW\*(C`decode\*(C'\fR to these (except for \e
      x2f). |  | 
| 1038 If \f(CW$enable\fR is true (or missing), then \f(CW\*(C`decode\*(C'\fR  will acc
      ept these |  | 
| 1039 unescaped strings. |  | 
| 1040 .PP |  | 
| 1041 .Vb 2 |  | 
| 1042 \&    $json\->loose\->decode(qq|["abc |  | 
| 1043 \&                                   def"]|); |  | 
| 1044 .Ve |  | 
| 1045 .PP |  | 
| 1046 See \*(L"\s-1SSECURITY\s0 \s-1CONSIDERATIONS\s0\*(R" in \s-1JSON::XS\s0. |  | 
| 1047 .SS "escape_slash" |  | 
| 1048 .IX Subsection "escape_slash" |  | 
| 1049 .Vb 1 |  | 
| 1050 \&    $json = $json\->escape_slash([$enable]) |  | 
| 1051 .Ve |  | 
| 1052 .PP |  | 
| 1053 According to \s-1JSON\s0 Grammar, \fIslash\fR (U+002F) is escaped. But default |  | 
| 1054 \&\s-1JSON::PP\s0 (as same as \s-1JSON::XS\s0) encodes strings without escaping 
      slash. |  | 
| 1055 .PP |  | 
| 1056 If \f(CW$enable\fR is true (or missing), then \f(CW\*(C`encode\*(C'\fR will esca
      pe slashes. |  | 
| 1057 .SS "indent_length" |  | 
| 1058 .IX Subsection "indent_length" |  | 
| 1059 .Vb 1 |  | 
| 1060 \&    $json = $json\->indent_length($length) |  | 
| 1061 .Ve |  | 
| 1062 .PP |  | 
| 1063 \&\s-1JSON::XS\s0 indent space length is 3 and cannot be changed. |  | 
| 1064 \&\s-1JSON::PP\s0 set the indent space length with the given \f(CW$length\fR. |  | 
| 1065 The default is 3. The acceptable range is 0 to 15. |  | 
| 1066 .SS "sort_by" |  | 
| 1067 .IX Subsection "sort_by" |  | 
| 1068 .Vb 2 |  | 
| 1069 \&    $json = $json\->sort_by($function_name) |  | 
| 1070 \&    $json = $json\->sort_by($subroutine_ref) |  | 
| 1071 .Ve |  | 
| 1072 .PP |  | 
| 1073 If \f(CW$function_name\fR or \f(CW$subroutine_ref\fR are set, its sort routine a
      re used |  | 
| 1074 in encoding \s-1JSON\s0 objects. |  | 
| 1075 .PP |  | 
| 1076 .Vb 2 |  | 
| 1077 \&   $js = $pc\->sort_by(sub { $JSON::PP::a cmp $JSON::PP::b })\->encode($obj); |  | 
| 1078 \&   # is($js, q|{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6,"g":7,"h":8,"i":9}|); |  | 
| 1079 \& |  | 
| 1080 \&   $js = $pc\->sort_by(\*(Aqown_sort\*(Aq)\->encode($obj); |  | 
| 1081 \&   # is($js, q|{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6,"g":7,"h":8,"i":9}|); |  | 
| 1082 \& |  | 
| 1083 \&   sub JSON::PP::own_sort { $JSON::PP::a cmp $JSON::PP::b } |  | 
| 1084 .Ve |  | 
| 1085 .PP |  | 
| 1086 As the sorting routine runs in the \s-1JSON::PP\s0 scope, the given |  | 
| 1087 subroutine name and the special variables \f(CW$a\fR, \f(CW$b\fR will begin |  | 
| 1088 \&'\s-1JSON::PP::\s0'. |  | 
| 1089 .PP |  | 
| 1090 If \f(CW$integer\fR is set, then the effect is same as \f(CW\*(C`canonical\*(C'\
      fR on. |  | 
| 1091 .SH "INTERNAL" |  | 
| 1092 .IX Header "INTERNAL" |  | 
| 1093 For developers. |  | 
| 1094 .IP "PP_encode_box" 4 |  | 
| 1095 .IX Item "PP_encode_box" |  | 
| 1096 Returns |  | 
| 1097 .Sp |  | 
| 1098 .Vb 4 |  | 
| 1099 \&        { |  | 
| 1100 \&            depth        => $depth, |  | 
| 1101 \&            indent_count => $indent_count, |  | 
| 1102 \&        } |  | 
| 1103 .Ve |  | 
| 1104 .IP "PP_decode_box" 4 |  | 
| 1105 .IX Item "PP_decode_box" |  | 
| 1106 Returns |  | 
| 1107 .Sp |  | 
| 1108 .Vb 9 |  | 
| 1109 \&        { |  | 
| 1110 \&            text    => $text, |  | 
| 1111 \&            at      => $at, |  | 
| 1112 \&            ch      => $ch, |  | 
| 1113 \&            len     => $len, |  | 
| 1114 \&            depth   => $depth, |  | 
| 1115 \&            encoding      => $encoding, |  | 
| 1116 \&            is_valid_utf8 => $is_valid_utf8, |  | 
| 1117 \&        }; |  | 
| 1118 .Ve |  | 
| 1119 .SH "MAPPING" |  | 
| 1120 .IX Header "MAPPING" |  | 
| 1121 This section is copied from \s-1JSON::XS\s0 and modified to \f(CW\*(C`JSON::PP\*
      (C'\fR. |  | 
| 1122 \&\s-1JSON::XS\s0 and \s-1JSON::PP\s0 mapping mechanisms are almost equivalent. |  | 
| 1123 .PP |  | 
| 1124 See to \*(L"\s-1MAPPING\s0\*(R" in \s-1JSON::XS\s0. |  | 
| 1125 .SS "\s-1JSON\s0 \-> \s-1PERL\s0" |  | 
| 1126 .IX Subsection "JSON -> PERL" |  | 
| 1127 .IP "object" 4 |  | 
| 1128 .IX Item "object" |  | 
| 1129 A \s-1JSON\s0 object becomes a reference to a hash in Perl. No ordering of objec
      t |  | 
| 1130 keys is preserved (\s-1JSON\s0 does not preserver object key ordering itself). |  | 
| 1131 .IP "array" 4 |  | 
| 1132 .IX Item "array" |  | 
| 1133 A \s-1JSON\s0 array becomes a reference to an array in Perl. |  | 
| 1134 .IP "string" 4 |  | 
| 1135 .IX Item "string" |  | 
| 1136 A \s-1JSON\s0 string becomes a string scalar in Perl \- Unicode codepoints in \s
      -1JSON\s0 |  | 
| 1137 are represented by the same codepoints in the Perl string, so no manual |  | 
| 1138 decoding is necessary. |  | 
| 1139 .IP "number" 4 |  | 
| 1140 .IX Item "number" |  | 
| 1141 A \s-1JSON\s0 number becomes either an integer, numeric (floating point) or |  | 
| 1142 string scalar in perl, depending on its range and any fractional parts. On |  | 
| 1143 the Perl level, there is no difference between those as Perl handles all |  | 
| 1144 the conversion details, but an integer may take slightly less memory and |  | 
| 1145 might represent more values exactly than floating point numbers. |  | 
| 1146 .Sp |  | 
| 1147 If the number consists of digits only, \f(CW\*(C`JSON\*(C'\fR will try to repres
      ent |  | 
| 1148 it as an integer value. If that fails, it will try to represent it as |  | 
| 1149 a numeric (floating point) value if that is possible without loss of |  | 
| 1150 precision. Otherwise it will preserve the number as a string value (in |  | 
| 1151 which case you lose roundtripping ability, as the \s-1JSON\s0 number will be |  | 
| 1152 re-encoded to a \s-1JSON\s0 string). |  | 
| 1153 .Sp |  | 
| 1154 Numbers containing a fractional or exponential part will always be |  | 
| 1155 represented as numeric (floating point) values, possibly at a loss of |  | 
| 1156 precision (in which case you might lose perfect roundtripping ability, but |  | 
| 1157 the \s-1JSON\s0 number will still be re-encoded as a \s-1JSON\s0 number). |  | 
| 1158 .Sp |  | 
| 1159 Note that precision is not accuracy \- binary floating point values cannot |  | 
| 1160 represent most decimal fractions exactly, and when converting from and to |  | 
| 1161 floating point, \f(CW\*(C`JSON\*(C'\fR only guarantees precision up to but not i
      ncluding |  | 
| 1162 the least significant bit. |  | 
| 1163 .Sp |  | 
| 1164 When \f(CW\*(C`allow_bignum\*(C'\fR is enable, the big integers |  | 
| 1165 and the numeric can be optionally converted into Math::BigInt and |  | 
| 1166 Math::BigFloat objects. |  | 
| 1167 .IP "true, false" 4 |  | 
| 1168 .IX Item "true, false" |  | 
| 1169 These \s-1JSON\s0 atoms become \f(CW\*(C`JSON::PP::true\*(C'\fR and \f(CW\*(C`JS
      ON::PP::false\*(C'\fR, |  | 
| 1170 respectively. They are overloaded to act almost exactly like the numbers |  | 
| 1171 \&\f(CW1\fR and \f(CW0\fR. You can check whether a scalar is a \s-1JSON\s0 boole
      an by using |  | 
| 1172 the \f(CW\*(C`JSON::is_bool\*(C'\fR function. |  | 
| 1173 .Sp |  | 
| 1174 .Vb 4 |  | 
| 1175 \&   print JSON::PP::true . "\en"; |  | 
| 1176 \&    => true |  | 
| 1177 \&   print JSON::PP::true + 1; |  | 
| 1178 \&    => 1 |  | 
| 1179 \& |  | 
| 1180 \&   ok(JSON::true eq  \*(Aq1\*(Aq); |  | 
| 1181 \&   ok(JSON::true == 1); |  | 
| 1182 .Ve |  | 
| 1183 .Sp |  | 
| 1184 \&\f(CW\*(C`JSON\*(C'\fR will install these missing overloading features to the 
      backend modules. |  | 
| 1185 .IP "null" 4 |  | 
| 1186 .IX Item "null" |  | 
| 1187 A \s-1JSON\s0 null atom becomes \f(CW\*(C`undef\*(C'\fR in Perl. |  | 
| 1188 .Sp |  | 
| 1189 \&\f(CW\*(C`JSON::PP::null\*(C'\fR returns \f(CW\*(C`undef\*(C'\fR. |  | 
| 1190 .SS "\s-1PERL\s0 \-> \s-1JSON\s0" |  | 
| 1191 .IX Subsection "PERL -> JSON" |  | 
| 1192 The mapping from Perl to \s-1JSON\s0 is slightly more difficult, as Perl is a |  | 
| 1193 truly typeless language, so we can only guess which \s-1JSON\s0 type is meant by |  | 
| 1194 a Perl value. |  | 
| 1195 .IP "hash references" 4 |  | 
| 1196 .IX Item "hash references" |  | 
| 1197 Perl hash references become \s-1JSON\s0 objects. As there is no inherent orderin
      g |  | 
| 1198 in hash keys (or \s-1JSON\s0 objects), they will usually be encoded in a |  | 
| 1199 pseudo-random order that can change between runs of the same program but |  | 
| 1200 stays generally the same within a single run of a program. \f(CW\*(C`JSON\*(C'\f
      R |  | 
| 1201 optionally sort the hash keys (determined by the \fIcanonical\fR flag), so |  | 
| 1202 the same data structure will serialise to the same \s-1JSON\s0 text (given same |  | 
| 1203 settings and version of \s-1JSON::XS\s0), but this incurs a runtime overhead |  | 
| 1204 and is only rarely useful, e.g. when you want to compare some \s-1JSON\s0 text |  | 
| 1205 against another for equality. |  | 
| 1206 .IP "array references" 4 |  | 
| 1207 .IX Item "array references" |  | 
| 1208 Perl array references become \s-1JSON\s0 arrays. |  | 
| 1209 .IP "other references" 4 |  | 
| 1210 .IX Item "other references" |  | 
| 1211 Other unblessed references are generally not allowed and will cause an |  | 
| 1212 exception to be thrown, except for references to the integers \f(CW0\fR and |  | 
| 1213 \&\f(CW1\fR, which get turned into \f(CW\*(C`false\*(C'\fR and \f(CW\*(C`true\*(
      C'\fR atoms in \s-1JSON\s0. You can |  | 
| 1214 also use \f(CW\*(C`JSON::false\*(C'\fR and \f(CW\*(C`JSON::true\*(C'\fR to impro
      ve readability. |  | 
| 1215 .Sp |  | 
| 1216 .Vb 1 |  | 
| 1217 \&   to_json [\e0,JSON::PP::true]      # yields [false,true] |  | 
| 1218 .Ve |  | 
| 1219 .IP "JSON::PP::true, JSON::PP::false, JSON::PP::null" 4 |  | 
| 1220 .IX Item "JSON::PP::true, JSON::PP::false, JSON::PP::null" |  | 
| 1221 These special values become \s-1JSON\s0 true and \s-1JSON\s0 false values, |  | 
| 1222 respectively. You can also use \f(CW\*(C`\e1\*(C'\fR and \f(CW\*(C`\e0\*(C'\fR d
      irectly if you want. |  | 
| 1223 .Sp |  | 
| 1224 JSON::PP::null returns \f(CW\*(C`undef\*(C'\fR. |  | 
| 1225 .IP "blessed objects" 4 |  | 
| 1226 .IX Item "blessed objects" |  | 
| 1227 Blessed objects are not directly representable in \s-1JSON\s0. See the |  | 
| 1228 \&\f(CW\*(C`allow_blessed\*(C'\fR and \f(CW\*(C`convert_blessed\*(C'\fR methods 
      on various options on |  | 
| 1229 how to deal with this: basically, you can choose between throwing an |  | 
| 1230 exception, encoding the reference as if it weren't blessed, or provide |  | 
| 1231 your own serialiser method. |  | 
| 1232 .Sp |  | 
| 1233 See to convert_blessed. |  | 
| 1234 .IP "simple scalars" 4 |  | 
| 1235 .IX Item "simple scalars" |  | 
| 1236 Simple Perl scalars (any scalar that is not a reference) are the most |  | 
| 1237 difficult objects to encode: \s-1JSON::XS\s0 and \s-1JSON::PP\s0 will encode und
      efined scalars as |  | 
| 1238 \&\s-1JSON\s0 \f(CW\*(C`null\*(C'\fR values, scalars that have last been used in
       a string context |  | 
| 1239 before encoding as \s-1JSON\s0 strings, and anything else as number value: |  | 
| 1240 .Sp |  | 
| 1241 .Vb 4 |  | 
| 1242 \&   # dump as number |  | 
| 1243 \&   encode_json [2]                      # yields [2] |  | 
| 1244 \&   encode_json [\-3.0e17]                # yields [\-3e+17] |  | 
| 1245 \&   my $value = 5; encode_json [$value]  # yields [5] |  | 
| 1246 \& |  | 
| 1247 \&   # used as string, so dump as string |  | 
| 1248 \&   print $value; |  | 
| 1249 \&   encode_json [$value]                 # yields ["5"] |  | 
| 1250 \& |  | 
| 1251 \&   # undef becomes null |  | 
| 1252 \&   encode_json [undef]                  # yields [null] |  | 
| 1253 .Ve |  | 
| 1254 .Sp |  | 
| 1255 You can force the type to be a string by stringifying it: |  | 
| 1256 .Sp |  | 
| 1257 .Vb 4 |  | 
| 1258 \&   my $x = 3.1; # some variable containing a number |  | 
| 1259 \&   "$x";        # stringified |  | 
| 1260 \&   $x .= "";    # another, more awkward way to stringify |  | 
| 1261 \&   print $x;    # perl does it for you, too, quite often |  | 
| 1262 .Ve |  | 
| 1263 .Sp |  | 
| 1264 You can force the type to be a number by numifying it: |  | 
| 1265 .Sp |  | 
| 1266 .Vb 3 |  | 
| 1267 \&   my $x = "3"; # some variable containing a string |  | 
| 1268 \&   $x += 0;     # numify it, ensuring it will be dumped as a number |  | 
| 1269 \&   $x *= 1;     # same thing, the choice is yours. |  | 
| 1270 .Ve |  | 
| 1271 .Sp |  | 
| 1272 You can not currently force the type in other, less obscure, ways. |  | 
| 1273 .Sp |  | 
| 1274 Note that numerical precision has the same meaning as under Perl (so |  | 
| 1275 binary to decimal conversion follows the same rules as in Perl, which |  | 
| 1276 can differ to other languages). Also, your perl interpreter might expose |  | 
| 1277 extensions to the floating point numbers of your platform, such as |  | 
| 1278 infinities or NaN's \- these cannot be represented in \s-1JSON\s0, and it is an |  | 
| 1279 error to pass those in. |  | 
| 1280 .IP "Big Number" 4 |  | 
| 1281 .IX Item "Big Number" |  | 
| 1282 When \f(CW\*(C`allow_bignum\*(C'\fR is enable, |  | 
| 1283 \&\f(CW\*(C`encode\*(C'\fR converts \f(CW\*(C`Math::BigInt\*(C'\fR objects and \
      f(CW\*(C`Math::BigFloat\*(C'\fR |  | 
| 1284 objects into \s-1JSON\s0 numbers. |  | 
| 1285 .SH "UNICODE HANDLING ON PERLS" |  | 
| 1286 .IX Header "UNICODE HANDLING ON PERLS" |  | 
| 1287 If you do not know about Unicode on Perl well, |  | 
| 1288 please check \*(L"A \s-1FEW\s0 \s-1NOTES\s0 \s-1ON\s0 \s-1UNICODE\s0 \s-1AND\s0 
      \s-1PERL\s0\*(R" in \s-1JSON::XS\s0. |  | 
| 1289 .SS "Perl 5.8 and later" |  | 
| 1290 .IX Subsection "Perl 5.8 and later" |  | 
| 1291 Perl can handle Unicode and the \s-1JSON::PP\s0 de/encode methods also work prop
      erly. |  | 
| 1292 .PP |  | 
| 1293 .Vb 2 |  | 
| 1294 \&    $json\->allow_nonref\->encode(chr hex 3042); |  | 
| 1295 \&    $json\->allow_nonref\->encode(chr hex 12345); |  | 
| 1296 .Ve |  | 
| 1297 .PP |  | 
| 1298 Returns \f(CW"\eu3042"\fR and \f(CW"\eud808\eudf45"\fR respectively. |  | 
| 1299 .PP |  | 
| 1300 .Vb 2 |  | 
| 1301 \&    $json\->allow_nonref\->decode(\*(Aq"\eu3042"\*(Aq); |  | 
| 1302 \&    $json\->allow_nonref\->decode(\*(Aq"\eud808\eudf45"\*(Aq); |  | 
| 1303 .Ve |  | 
| 1304 .PP |  | 
| 1305 Returns \s-1UTF\-8\s0 encoded strings with \s-1UTF8\s0 flag, regarded as \f(CW\*
      (C`U+3042\*(C'\fR and \f(CW\*(C`U+12345\*(C'\fR. |  | 
| 1306 .PP |  | 
| 1307 Note that the versions from Perl 5.8.0 to 5.8.2, Perl built-in \f(CW\*(C`join\*(
      C'\fR was broken, |  | 
| 1308 so \s-1JSON::PP\s0 wraps the \f(CW\*(C`join\*(C'\fR with a subroutine. Thus \s-1
      JSON::PP\s0 works slow in the versions. |  | 
| 1309 .SS "Perl 5.6" |  | 
| 1310 .IX Subsection "Perl 5.6" |  | 
| 1311 Perl can handle Unicode and the \s-1JSON::PP\s0 de/encode methods also work. |  | 
| 1312 .SS "Perl 5.005" |  | 
| 1313 .IX Subsection "Perl 5.005" |  | 
| 1314 Perl 5.005 is a byte semantics world \*(-- all strings are sequences of bytes. |  | 
| 1315 That means the unicode handling is not available. |  | 
| 1316 .PP |  | 
| 1317 In encoding, |  | 
| 1318 .PP |  | 
| 1319 .Vb 2 |  | 
| 1320 \&    $json\->allow_nonref\->encode(chr hex 3042);  # hex 3042 is 12354. |  | 
| 1321 \&    $json\->allow_nonref\->encode(chr hex 12345); # hex 12345 is 74565. |  | 
| 1322 .Ve |  | 
| 1323 .PP |  | 
| 1324 Returns \f(CW\*(C`B\*(C'\fR and \f(CW\*(C`E\*(C'\fR, as \f(CW\*(C`chr\*(C'\fR ta
      kes a value more than 255, it treats |  | 
| 1325 as \f(CW\*(C`$value % 256\*(C'\fR, so the above codes are equivalent to : |  | 
| 1326 .PP |  | 
| 1327 .Vb 2 |  | 
| 1328 \&    $json\->allow_nonref\->encode(chr 66); |  | 
| 1329 \&    $json\->allow_nonref\->encode(chr 69); |  | 
| 1330 .Ve |  | 
| 1331 .PP |  | 
| 1332 In decoding, |  | 
| 1333 .PP |  | 
| 1334 .Vb 1 |  | 
| 1335 \&    $json\->decode(\*(Aq"\eu00e3\eu0081\eu0082"\*(Aq); |  | 
| 1336 .Ve |  | 
| 1337 .PP |  | 
| 1338 The returned is a byte sequence \f(CW\*(C`0xE3 0x81 0x82\*(C'\fR for \s-1UTF\-8\
      s0 encoded |  | 
| 1339 japanese character (\f(CW\*(C`HIRAGANA LETTER A\*(C'\fR). |  | 
| 1340 And if it is represented in Unicode code point, \f(CW\*(C`U+3042\*(C'\fR. |  | 
| 1341 .PP |  | 
| 1342 Next, |  | 
| 1343 .PP |  | 
| 1344 .Vb 1 |  | 
| 1345 \&    $json\->decode(\*(Aq"\eu3042"\*(Aq); |  | 
| 1346 .Ve |  | 
| 1347 .PP |  | 
| 1348 We ordinary expect the returned value is a Unicode character \f(CW\*(C`U+3042\*(
      C'\fR. |  | 
| 1349 But here is 5.005 world. This is \f(CW\*(C`0xE3 0x81 0x82\*(C'\fR. |  | 
| 1350 .PP |  | 
| 1351 .Vb 1 |  | 
| 1352 \&    $json\->decode(\*(Aq"\eud808\eudf45"\*(Aq); |  | 
| 1353 .Ve |  | 
| 1354 .PP |  | 
| 1355 This is not a character \f(CW\*(C`U+12345\*(C'\fR but bytes \- \f(CW\*(C`0xf0 0x
      92 0x8d 0x85\*(C'\fR. |  | 
| 1356 .SH "TODO" |  | 
| 1357 .IX Header "TODO" |  | 
| 1358 .IP "speed" 4 |  | 
| 1359 .IX Item "speed" |  | 
| 1360 .PD 0 |  | 
| 1361 .IP "memory saving" 4 |  | 
| 1362 .IX Item "memory saving" |  | 
| 1363 .PD |  | 
| 1364 .SH "SEE ALSO" |  | 
| 1365 .IX Header "SEE ALSO" |  | 
| 1366 Most of the document are copied and modified from \s-1JSON::XS\s0 doc. |  | 
| 1367 .PP |  | 
| 1368 \&\s-1JSON::XS\s0 |  | 
| 1369 .PP |  | 
| 1370 \&\s-1RFC4627\s0 (<http://www.ietf.org/rfc/rfc4627.txt>) |  | 
| 1371 .SH "AUTHOR" |  | 
| 1372 .IX Header "AUTHOR" |  | 
| 1373 Makamaka Hannyaharamitu, <makamaka[at]cpan.org> |  | 
| 1374 .SH "COPYRIGHT AND LICENSE" |  | 
| 1375 .IX Header "COPYRIGHT AND LICENSE" |  | 
| 1376 Copyright 2007\-2012 by Makamaka Hannyaharamitu |  | 
| 1377 .PP |  | 
| 1378 This library is free software; you can redistribute it and/or modify |  | 
| 1379 it under the same terms as Perl itself. |  | 
| OLD | NEW | 
|---|