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

Comparing JSON-XS/XS.pm (file contents):
Revision 1.33 by root, Wed May 9 16:10:37 2007 UTC vs.
Revision 1.37 by root, Wed Jun 6 14:52:49 2007 UTC

86package JSON::XS; 86package JSON::XS;
87 87
88use strict; 88use strict;
89 89
90BEGIN { 90BEGIN {
91 our $VERSION = '1.12'; 91 our $VERSION = '1.22';
92 our @ISA = qw(Exporter); 92 our @ISA = qw(Exporter);
93 93
94 our @EXPORT = qw(to_json from_json objToJson jsonToObj); 94 our @EXPORT = qw(to_json from_json objToJson jsonToObj);
95 require Exporter; 95 require Exporter;
96 96
374 374
375JSON numbers and strings become simple Perl scalars. JSON arrays become 375JSON numbers and strings become simple Perl scalars. JSON arrays become
376Perl arrayrefs and JSON objects become Perl hashrefs. C<true> becomes 376Perl arrayrefs and JSON objects become Perl hashrefs. C<true> becomes
377C<1>, C<false> becomes C<0> and C<null> becomes C<undef>. 377C<1>, C<false> becomes C<0> and C<null> becomes C<undef>.
378 378
379=item ($perl_scalar, $characters) = $json->decode_prefix ($json_text)
380
381This works like the C<decode> method, but instead of raising an exception
382when there is trailing garbage after the first JSON object, it will
383silently stop parsing there and return the number of characters consumed
384so far.
385
386This is useful if your JSON texts are not delimited by an outer protocol
387(which is not the brightest thing to do in the first place) and you need
388to know where the JSON text ends.
389
390 JSON::XS->new->decode_prefix ("[1] the tail")
391 => ([], 3)
392
379=back 393=back
380 394
381 395
382=head1 MAPPING 396=head1 MAPPING
383 397
598It seems that JSON::XS is surprisingly fast, as shown in the following 612It seems that JSON::XS is surprisingly fast, as shown in the following
599tables. They have been generated with the help of the C<eg/bench> program 613tables. They have been generated with the help of the C<eg/bench> program
600in the JSON::XS distribution, to make it easy to compare on your own 614in the JSON::XS distribution, to make it easy to compare on your own
601system. 615system.
602 616
603First comes a comparison between various modules using a very short JSON 617First comes a comparison between various modules using a very short
604string: 618single-line JSON string:
605 619
606 {"method": "handleMessage", "params": ["user1", "we were just talking"], "id": null} 620 {"method": "handleMessage", "params": ["user1", "we were just talking"], \
621 "id": null, [1,11,234,-5,1e5,1e7, true, false]}
607 622
608It shows the number of encodes/decodes per second (JSON::XS uses the 623It shows the number of encodes/decodes per second (JSON::XS uses the
609functional interface, while JSON::XS/2 uses the OO interface with 624functional interface, while JSON::XS/2 uses the OO interface with
610pretty-printing and hashkey sorting enabled). Higher is better: 625pretty-printing and hashkey sorting enabled). Higher is better:
611 626
627 -----------+------------+------------+
612 module | encode | decode | 628 module | encode | decode |
613 -----------|------------|------------| 629 -----------|------------|------------|
614 JSON | 11488.516 | 7823.035 | 630 JSON | 10597.029 | 5740.903 |
615 JSON::DWIW | 94708.054 | 129094.260 | 631 JSON::DWIW | 78251.940 | 98457.840 |
616 JSON::PC | 63884.157 | 128528.212 | 632 JSON::PC | 70611.178 | 92794.336 |
617 JSON::Syck | 34898.677 | 42096.911 | 633 JSON::Syck | 28767.517 | 38199.490 |
618 JSON::XS | 654027.064 | 396423.669 | 634 JSON::XS | 419430.400 | 265462.278 |
619 JSON::XS/2 | 371564.190 | 371725.613 | 635 JSON::XS/2 | 279620.267 | 265462.278 |
636 JSON::XS/3 | 388361.481 | 265462.278 |
637 Storable | 16294.887 | 16844.594 |
620 -----------+------------+------------+ 638 -----------+------------+------------+
621 639
622That is, JSON::XS is more than six times faster than JSON::DWIW on 640That is, JSON::XS is about five times faster than JSON::DWIW on encoding,
623encoding, more than three times faster on decoding, and about thirty times 641about three times faster on decoding, and about fourty times faster
624faster than JSON, even with pretty-printing and key sorting. 642than JSON, even with pretty-printing and key sorting. It also compares
643favourably to Storable for small amounts of data.
625 644
626Using a longer test string (roughly 18KB, generated from Yahoo! Locals 645Using a longer test string (roughly 18KB, generated from Yahoo! Locals
627search API (http://nanoref.com/yahooapis/mgPdGg): 646search API (http://nanoref.com/yahooapis/mgPdGg):
628 647
629 module | encode | decode | 648 module | encode | decode |
630 -----------|------------|------------| 649 -----------|------------|------------|
631 JSON | 273.023 | 44.674 | 650 JSON | 254.685 | 37.665 |
632 JSON::DWIW | 1089.383 | 1145.704 | 651 JSON::DWIW | 1014.244 | 1087.678 |
633 JSON::PC | 3097.419 | 2393.921 | 652 JSON::PC | 3602.116 | 2307.352 |
634 JSON::Syck | 514.060 | 843.053 | 653 JSON::Syck | 558.035 | 776.263 |
635 JSON::XS | 6479.668 | 3636.364 | 654 JSON::XS | 5747.196 | 3543.684 |
636 JSON::XS/2 | 3774.221 | 3599.124 | 655 JSON::XS/2 | 3968.121 | 3589.170 |
656 JSON::XS/3 | 6105.246 | 3561.134 |
657 Storable | 4456.337 | 5320.020 |
637 -----------+------------+------------+ 658 -----------+------------+------------+
638 659
639Again, JSON::XS leads by far. 660Again, JSON::XS leads by far.
640 661
641On large strings containing lots of high unicode characters, some modules 662On large strings containing lots of high unicode characters, some modules

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines