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.39 by root, Mon Jun 11 02:58:10 2007 UTC vs.
Revision 1.41 by root, Mon Jun 11 03:45:26 2007 UTC

86package JSON::XS; 86package JSON::XS;
87 87
88use strict; 88use strict;
89 89
90BEGIN { 90BEGIN {
91 our $VERSION = '1.23'; 91 our $VERSION = '1.24';
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
614 614
615You often hear that JSON is a subset (or a close subset) of YAML. This is, 615You often hear that JSON is a subset (or a close subset) of YAML. This is,
616however, a mass hysteria and very far from the truth. In general, there is 616however, a mass hysteria and very far from the truth. In general, there is
617no way to configure JSON::XS to output a data structure as valid YAML. 617no way to configure JSON::XS to output a data structure as valid YAML.
618 618
619If you really must use JSON::XS to generate YAML, you should this 619If you really must use JSON::XS to generate YAML, you should use this
620algorithm (subject to change in future versions): 620algorithm (subject to change in future versions):
621 621
622 my $to_yaml = JSON::XS->new->utf8->space_after (1); 622 my $to_yaml = JSON::XS->new->utf8->space_after (1);
623 my $yaml = $to_yaml->encode ($ref) . "\n"; 623 my $yaml = $to_yaml->encode ($ref) . "\n";
624 624
625This will usually generate JSON texts that also parse as valid 625This will usually generate JSON texts that also parse as valid
626YAML. Please note that YAML has hardcoded limits on object key lengths 626YAML. Please note that YAML has hardcoded limits on (simple) object key
627that JSON doesn't have, so you should make sure that your hash keys are 627lengths that JSON doesn't have, so you should make sure that your hash
628noticably shorter than 1024 characters. 628keys are noticably shorter than the 1024 characters YAML allows.
629 629
630There might be other incompatibilities that I am not aware of. In general 630There might be other incompatibilities that I am not aware of. In general
631you should not try to generate YAML with a JSON generator or vice versa, 631you should not try to generate YAML with a JSON generator or vice versa,
632or try to parse JSON with a YAML parser or vice versa. 632or try to parse JSON with a YAML parser or vice versa: chances are high
633that you will run into severe interoperability problems.
633 634
634 635
635=head2 SPEED 636=head2 SPEED
636 637
637It seems that JSON::XS is surprisingly fast, as shown in the following 638It seems that JSON::XS is surprisingly fast, as shown in the following
651shrink). Higher is better: 652shrink). Higher is better:
652 653
653 module | encode | decode | 654 module | encode | decode |
654 -----------|------------|------------| 655 -----------|------------|------------|
655 JSON | 7645.468 | 4208.613 | 656 JSON | 7645.468 | 4208.613 |
656 JSON::DWIW | 68534.379 | 79437.576 | 657 JSON::DWIW | 40721.398 | 77101.176 |
657 JSON::PC | 65948.176 | 78251.940 | 658 JSON::PC | 65948.176 | 78251.940 |
658 JSON::Syck | 23379.621 | 28416.694 | 659 JSON::Syck | 22844.793 | 26479.192 |
659 JSON::XS | 388361.481 | 199728.762 | 660 JSON::XS | 388361.481 | 199728.762 |
660 JSON::XS/2 | 218453.333 | 192399.266 | 661 JSON::XS/2 | 218453.333 | 192399.266 |
661 JSON::XS/3 | 338250.323 | 192399.266 | 662 JSON::XS/3 | 338250.323 | 192399.266 |
662 Storable | 15732.573 | 28571.553 | 663 Storable | 15779.925 | 14169.946 |
663 -----------+------------+------------+ 664 -----------+------------+------------+
664 665
665That is, JSON::XS is about five times faster than JSON::DWIW on encoding, 666That is, JSON::XS is about five times faster than JSON::DWIW on encoding,
666about three times faster on decoding, and over fourty times faster 667about three times faster on decoding, and over fourty times faster
667than JSON, even with pretty-printing and key sorting. It also compares 668than JSON, even with pretty-printing and key sorting. It also compares
671search API (http://nanoref.com/yahooapis/mgPdGg): 672search API (http://nanoref.com/yahooapis/mgPdGg):
672 673
673 module | encode | decode | 674 module | encode | decode |
674 -----------|------------|------------| 675 -----------|------------|------------|
675 JSON | 254.685 | 37.665 | 676 JSON | 254.685 | 37.665 |
676 JSON::DWIW | 1014.244 | 1087.678 | 677 JSON::DWIW | 843.343 | 1049.731 |
677 JSON::PC | 3602.116 | 2307.352 | 678 JSON::PC | 3602.116 | 2307.352 |
678 JSON::Syck | 558.035 | 776.263 | 679 JSON::Syck | 505.107 | 787.899 |
679 JSON::XS | 5747.196 | 3543.684 | 680 JSON::XS | 5747.196 | 3690.220 |
680 JSON::XS/2 | 3968.121 | 3589.170 | 681 JSON::XS/2 | 3968.121 | 3676.634 |
681 JSON::XS/3 | 6105.246 | 3561.134 | 682 JSON::XS/3 | 6105.246 | 3662.508 |
682 Storable | 4456.337 | 5320.020 | 683 Storable | 4417.337 | 5285.161 |
683 -----------+------------+------------+ 684 -----------+------------+------------+
684 685
685Again, JSON::XS leads by far. 686Again, JSON::XS leads by far (except for Storable which non-surprisingly
687decodes faster).
686 688
687On large strings containing lots of high unicode characters, some modules 689On large strings containing lots of high unicode characters, some modules
688(such as JSON::PC) seem to decode faster than JSON::XS, but the result 690(such as JSON::PC) seem to decode faster than JSON::XS, but the result
689will be broken due to missing (or wrong) unicode handling. Others refuse 691will be broken due to missing (or wrong) unicode handling. Others refuse
690to decode or encode properly, so it was impossible to prepare a fair 692to decode or encode properly, so it was impossible to prepare a fair

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines