ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/JSON-XS/README
(Generate patch)

Comparing JSON-XS/README (file contents):
Revision 1.10 by root, Wed Apr 4 00:01:44 2007 UTC vs.
Revision 1.14 by root, Sat Jun 23 23:50:03 2007 UTC

92 92
93 $perl_scalar = JSON::XS->new->utf8->decode ($json_text) 93 $perl_scalar = JSON::XS->new->utf8->decode ($json_text)
94 94
95 except being faster. 95 except being faster.
96 96
97 $is_boolean = JSON::XS::is_bool $scalar
98 Returns true if the passed scalar represents either JSON::XS::true
99 or JSON::XS::false, two constants that act like 1 and 0,
100 respectively and are used to represent JSON "true" and "false"
101 values in Perl.
102
103 See MAPPING, below, for more information on how JSON values are
104 mapped to Perl.
105
97OBJECT-ORIENTED INTERFACE 106OBJECT-ORIENTED INTERFACE
98 The object oriented interface lets you configure your own encoding or 107 The object oriented interface lets you configure your own encoding or
99 decoding style, within the limits of supported formats. 108 decoding style, within the limits of supported formats.
100 109
101 $json = new JSON::XS 110 $json = new JSON::XS
112 $json = $json->ascii ([$enable]) 121 $json = $json->ascii ([$enable])
113 If $enable is true (or missing), then the "encode" method will not 122 If $enable is true (or missing), then the "encode" method will not
114 generate characters outside the code range 0..127 (which is ASCII). 123 generate characters outside the code range 0..127 (which is ASCII).
115 Any unicode characters outside that range will be escaped using 124 Any unicode characters outside that range will be escaped using
116 either a single \uXXXX (BMP characters) or a double \uHHHH\uLLLLL 125 either a single \uXXXX (BMP characters) or a double \uHHHH\uLLLLL
117 escape sequence, as per RFC4627. 126 escape sequence, as per RFC4627. The resulting encoded JSON text can
127 be treated as a native unicode string, an ascii-encoded,
128 latin1-encoded or UTF-8 encoded string, or any other superset of
129 ASCII.
118 130
119 If $enable is false, then the "encode" method will not escape 131 If $enable is false, then the "encode" method will not escape
120 Unicode characters unless required by the JSON syntax. This results 132 Unicode characters unless required by the JSON syntax or other
121 in a faster and more compact format. 133 flags. This results in a faster and more compact format.
134
135 The main use for this flag is to produce JSON texts that can be
136 transmitted over a 7-bit channel, as the encoded JSON texts will not
137 contain any 8 bit characters.
122 138
123 JSON::XS->new->ascii (1)->encode ([chr 0x10401]) 139 JSON::XS->new->ascii (1)->encode ([chr 0x10401])
124 => ["\ud801\udc01"] 140 => ["\ud801\udc01"]
141
142 $json = $json->latin1 ([$enable])
143 If $enable is true (or missing), then the "encode" method will
144 encode the resulting JSON text as latin1 (or iso-8859-1), escaping
145 any characters outside the code range 0..255. The resulting string
146 can be treated as a latin1-encoded JSON text or a native unicode
147 string. The "decode" method will not be affected in any way by this
148 flag, as "decode" by default expects unicode, which is a strict
149 superset of latin1.
150
151 If $enable is false, then the "encode" method will not escape
152 Unicode characters unless required by the JSON syntax or other
153 flags.
154
155 The main use for this flag is efficiently encoding binary data as
156 JSON text, as most octets will not be escaped, resulting in a
157 smaller encoded size. The disadvantage is that the resulting JSON
158 text is encoded in latin1 (and must correctly be treated as such
159 when storing and transfering), a rare encoding for JSON. It is
160 therefore most useful when you want to store data structures known
161 to contain binary data efficiently in files or databases, not when
162 talking to other JSON encoders/decoders.
163
164 JSON::XS->new->latin1->encode (["\x{89}\x{abc}"]
165 => ["\x{89}\\u0abc"] # (perl syntax, U+abc escaped, U+89 not)
125 166
126 $json = $json->utf8 ([$enable]) 167 $json = $json->utf8 ([$enable])
127 If $enable is true (or missing), then the "encode" method will 168 If $enable is true (or missing), then the "encode" method will
128 encode the JSON result into UTF-8, as required by many protocols, 169 encode the JSON result into UTF-8, as required by many protocols,
129 while the "decode" method expects to be handled an UTF-8-encoded 170 while the "decode" method expects to be handled an UTF-8-encoded
301 342
302 JSON numbers and strings become simple Perl scalars. JSON arrays 343 JSON numbers and strings become simple Perl scalars. JSON arrays
303 become Perl arrayrefs and JSON objects become Perl hashrefs. "true" 344 become Perl arrayrefs and JSON objects become Perl hashrefs. "true"
304 becomes 1, "false" becomes 0 and "null" becomes "undef". 345 becomes 1, "false" becomes 0 and "null" becomes "undef".
305 346
347 ($perl_scalar, $characters) = $json->decode_prefix ($json_text)
348 This works like the "decode" method, but instead of raising an
349 exception when there is trailing garbage after the first JSON
350 object, it will silently stop parsing there and return the number of
351 characters consumed so far.
352
353 This is useful if your JSON texts are not delimited by an outer
354 protocol (which is not the brightest thing to do in the first place)
355 and you need to know where the JSON text ends.
356
357 JSON::XS->new->decode_prefix ("[1] the tail")
358 => ([], 3)
359
306MAPPING 360MAPPING
307 This section describes how JSON::XS maps Perl values to JSON values and 361 This section describes how JSON::XS maps Perl values to JSON values and
308 vice versa. These mappings are designed to "do the right thing" in most 362 vice versa. These mappings are designed to "do the right thing" in most
309 circumstances automatically, preserving round-tripping characteristics 363 circumstances automatically, preserving round-tripping characteristics
310 (what you put in comes out as something equivalent). 364 (what you put in comes out as something equivalent).
334 all the conversion details, but an integer may take slightly less 388 all the conversion details, but an integer may take slightly less
335 memory and might represent more values exactly than (floating point) 389 memory and might represent more values exactly than (floating point)
336 numbers. 390 numbers.
337 391
338 true, false 392 true, false
339 These JSON atoms become 0, 1, respectively. Information is lost in 393 These JSON atoms become "JSON::XS::true" and "JSON::XS::false",
340 this process. Future versions might represent those values 394 respectively. They are overloaded to act almost exactly like the
341 differently, but they will be guarenteed to act like these integers 395 numbers 1 and 0. You can check wether a scalar is a JSON boolean by
342 would normally in Perl. 396 using the "JSON::XS::is_bool" function.
343 397
344 null 398 null
345 A JSON null atom becomes "undef" in Perl. 399 A JSON null atom becomes "undef" in Perl.
346 400
347 PERL -> JSON 401 PERL -> JSON
371 can also use "JSON::XS::false" and "JSON::XS::true" to improve 425 can also use "JSON::XS::false" and "JSON::XS::true" to improve
372 readability. 426 readability.
373 427
374 to_json [\0,JSON::XS::true] # yields [false,true] 428 to_json [\0,JSON::XS::true] # yields [false,true]
375 429
430 JSON::XS::true, JSON::XS::false
431 These special values become JSON true and JSON false values,
432 respectively. You cna alos use "\1" and "\0" directly if you want.
433
376 blessed objects 434 blessed objects
377 Blessed objects are not allowed. JSON::XS currently tries to encode 435 Blessed objects are not allowed. JSON::XS currently tries to encode
378 their underlying representation (hash- or arrayref), but this 436 their underlying representation (hash- or arrayref), but this
379 behaviour might change in future versions. 437 behaviour might change in future versions.
380 438
490 Does not generate valid JSON texts (key strings are often unquoted, 548 Does not generate valid JSON texts (key strings are often unquoted,
491 empty keys result in nothing being output) 549 empty keys result in nothing being output)
492 550
493 Does not check input for validity. 551 Does not check input for validity.
494 552
553 JSON and YAML
554 You often hear that JSON is a subset (or a close subset) of YAML. This
555 is, however, a mass hysteria and very far from the truth. In general,
556 there is no way to configure JSON::XS to output a data structure as
557 valid YAML.
558
559 If you really must use JSON::XS to generate YAML, you should use this
560 algorithm (subject to change in future versions):
561
562 my $to_yaml = JSON::XS->new->utf8->space_after (1);
563 my $yaml = $to_yaml->encode ($ref) . "\n";
564
565 This will usually generate JSON texts that also parse as valid YAML.
566 Please note that YAML has hardcoded limits on (simple) object key
567 lengths that JSON doesn't have, so you should make sure that your hash
568 keys are noticably shorter than the 1024 characters YAML allows.
569
570 There might be other incompatibilities that I am not aware of. In
571 general you should not try to generate YAML with a JSON generator or
572 vice versa, or try to parse JSON with a YAML parser or vice versa:
573 chances are high that you will run into severe interoperability
574 problems.
575
495 SPEED 576 SPEED
496 It seems that JSON::XS is surprisingly fast, as shown in the following 577 It seems that JSON::XS is surprisingly fast, as shown in the following
497 tables. They have been generated with the help of the "eg/bench" program 578 tables. They have been generated with the help of the "eg/bench" program
498 in the JSON::XS distribution, to make it easy to compare on your own 579 in the JSON::XS distribution, to make it easy to compare on your own
499 system. 580 system.
500 581
501 First comes a comparison between various modules using a very short JSON 582 First comes a comparison between various modules using a very short
502 string: 583 single-line JSON string:
503 584
504 {"method": "handleMessage", "params": ["user1", "we were just talking"], "id": null} 585 {"method": "handleMessage", "params": ["user1", "we were just talking"], \
586 "id": null, "array":[1,11,234,-5,1e5,1e7, true, false]}
505 587
506 It shows the number of encodes/decodes per second (JSON::XS uses the 588 It shows the number of encodes/decodes per second (JSON::XS uses the
507 functional interface, while JSON::XS/2 uses the OO interface with 589 functional interface, while JSON::XS/2 uses the OO interface with
508 pretty-printing and hashkey sorting enabled). Higher is better: 590 pretty-printing and hashkey sorting enabled, JSON::XS/3 enables shrink).
591 Higher is better:
509 592
510 module | encode | decode | 593 module | encode | decode |
511 -----------|------------|------------| 594 -----------|------------|------------|
512 JSON | 11488.516 | 7823.035 | 595 JSON | 7645.468 | 4208.613 |
513 JSON::DWIW | 94708.054 | 129094.260 | 596 JSON::DWIW | 40721.398 | 77101.176 |
514 JSON::PC | 63884.157 | 128528.212 | 597 JSON::PC | 65948.176 | 78251.940 |
515 JSON::Syck | 34898.677 | 42096.911 | 598 JSON::Syck | 22844.793 | 26479.192 |
516 JSON::XS | 654027.064 | 396423.669 | 599 JSON::XS | 388361.481 | 199728.762 |
517 JSON::XS/2 | 371564.190 | 371725.613 | 600 JSON::XS/2 | 218453.333 | 192399.266 |
601 JSON::XS/3 | 338250.323 | 192399.266 |
602 Storable | 15779.925 | 14169.946 |
518 -----------+------------+------------+ 603 -----------+------------+------------+
519 604
520 That is, JSON::XS is more than six times faster than JSON::DWIW on 605 That is, JSON::XS is about five times faster than JSON::DWIW on
521 encoding, more than three times faster on decoding, and about thirty 606 encoding, about three times faster on decoding, and over fourty times
522 times faster than JSON, even with pretty-printing and key sorting. 607 faster than JSON, even with pretty-printing and key sorting. It also
608 compares favourably to Storable for small amounts of data.
523 609
524 Using a longer test string (roughly 18KB, generated from Yahoo! Locals 610 Using a longer test string (roughly 18KB, generated from Yahoo! Locals
525 search API (http://nanoref.com/yahooapis/mgPdGg): 611 search API (http://nanoref.com/yahooapis/mgPdGg):
526 612
527 module | encode | decode | 613 module | encode | decode |
528 -----------|------------|------------| 614 -----------|------------|------------|
529 JSON | 273.023 | 44.674 | 615 JSON | 254.685 | 37.665 |
530 JSON::DWIW | 1089.383 | 1145.704 | 616 JSON::DWIW | 843.343 | 1049.731 |
531 JSON::PC | 3097.419 | 2393.921 | 617 JSON::PC | 3602.116 | 2307.352 |
532 JSON::Syck | 514.060 | 843.053 | 618 JSON::Syck | 505.107 | 787.899 |
533 JSON::XS | 6479.668 | 3636.364 | 619 JSON::XS | 5747.196 | 3690.220 |
534 JSON::XS/2 | 3774.221 | 3599.124 | 620 JSON::XS/2 | 3968.121 | 3676.634 |
621 JSON::XS/3 | 6105.246 | 3662.508 |
622 Storable | 4417.337 | 5285.161 |
535 -----------+------------+------------+ 623 -----------+------------+------------+
536 624
537 Again, JSON::XS leads by far. 625 Again, JSON::XS leads by far (except for Storable which non-surprisingly
626 decodes faster).
538 627
539 On large strings containing lots of high unicode characters, some 628 On large strings containing lots of high unicode characters, some
540 modules (such as JSON::PC) seem to decode faster than JSON::XS, but the 629 modules (such as JSON::PC) seem to decode faster than JSON::XS, but the
541 result will be broken due to missing (or wrong) unicode handling. Others 630 result will be broken due to missing (or wrong) unicode handling. Others
542 refuse to decode or encode properly, so it was impossible to prepare a 631 refuse to decode or encode properly, so it was impossible to prepare a
565 to be conservative, the default nesting limit is set to 512. If your 654 to be conservative, the default nesting limit is set to 512. If your
566 process has a smaller stack, you should adjust this setting accordingly 655 process has a smaller stack, you should adjust this setting accordingly
567 with the "max_depth" method. 656 with the "max_depth" method.
568 657
569 And last but least, something else could bomb you that I forgot to think 658 And last but least, something else could bomb you that I forgot to think
570 of. In that case, you get to keep the pieces. I am alway sopen for 659 of. In that case, you get to keep the pieces. I am always open for
571 hints, though... 660 hints, though...
661
662 If you are using JSON::XS to return packets to consumption by javascript
663 scripts in a browser you should have a look at
664 <http://jpsykes.com/47/practical-csrf-and-json-security> to see wether
665 you are vulnerable to some common attack vectors (which really are
666 browser design bugs, but it is still you who will have to deal with it,
667 as major browser developers care only for features, not about doing
668 security right).
572 669
573BUGS 670BUGS
574 While the goal of this module is to be correct, that unfortunately does 671 While the goal of this module is to be correct, that unfortunately does
575 not mean its bug-free, only that I think its design is bug-free. It is 672 not mean its bug-free, only that I think its design is bug-free. It is
576 still relatively early in its development. If you keep reporting bugs 673 still relatively early in its development. If you keep reporting bugs

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines