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 |