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.80 by root, Sat Dec 29 17:22:39 2007 UTC vs.
Revision 1.82 by root, Sun Dec 30 21:24:57 2007 UTC

906 906
907 907
908=head2 JSON and YAML 908=head2 JSON and YAML
909 909
910You often hear that JSON is a subset of YAML. This is, however, a mass 910You often hear that JSON is a subset of YAML. This is, however, a mass
911hysteria and very far from the truth. In general, there is no way to 911hysteria(*) and very far from the truth. In general, there is no way to
912configure JSON::XS to output a data structure as valid YAML that works for 912configure JSON::XS to output a data structure as valid YAML that works for
913all cases. 913all cases.
914 914
915If you really must use JSON::XS to generate YAML, you should use this 915If you really must use JSON::XS to generate YAML, you should use this
916algorithm (subject to change in future versions): 916algorithm (subject to change in future versions):
922YAML. Please note that YAML has hardcoded limits on (simple) object key 922YAML. Please note that YAML has hardcoded limits on (simple) object key
923lengths that JSON doesn't have and also has different and incompatible 923lengths that JSON doesn't have and also has different and incompatible
924unicode handling, so you should make sure that your hash keys are 924unicode handling, so you should make sure that your hash keys are
925noticeably shorter than the 1024 "stream characters" YAML allows and that 925noticeably shorter than the 1024 "stream characters" YAML allows and that
926you do not have codepoints with values outside the Unicode BMP (basic 926you do not have codepoints with values outside the Unicode BMP (basic
927multilingual page). 927multilingual page). YAML also does not allow C<\/> sequences in strings
928(which JSON::XS does not I<currently> generate).
928 929
929There might be other incompatibilities that I am not aware of. In general 930There might be other incompatibilities that I am not aware of. In general
930you should not try to generate YAML with a JSON generator or vice versa, 931you should not try to generate YAML with a JSON generator or vice versa,
931or try to parse JSON with a YAML parser or vice versa: chances are high 932or try to parse JSON with a YAML parser or vice versa: chances are high
932that you will run into severe interoperability problems when you least 933that you will run into severe interoperability problems when you least
933expect it. 934expect it.
935
936=over 4
937
938=item (*)
939
940This is spread actively by the YAML team, however. For many years now they
941claim YAML were a superset of JSON, even when proven otherwise.
942
943Even the author of this manpage was at some point accused of providing
944"incorrect" information, despite the evidence presented (claims ranged
945from "your documentation contains inaccurate and negative statements about
946YAML" (the only negative comment is this footnote, and it didn't exist
947back then; the question on which claims were inaccurate was never answered
948etc.) to "the YAML spec is not up-to-date" (the *real* and suppsedly
949JSON-compatible spec is apparently not currently publicly available)
950to actual requests to replace this section by *incorrect* information,
951suppressing information about the real problem).
952
953So whenever you are told that YAML was a superset of JSON, first check
954wether it is really true (it might be when you check it, but it cetrainly
955is not true when this was written). I would much prefer if the YAML team
956would spent their time on actually making JSON compatibility a truth
957(JSON, after all, has a very small and simple specification) instead of
958trying to lobby/force people into reporting untruths.
959
960=back
934 961
935 962
936=head2 SPEED 963=head2 SPEED
937 964
938It seems that JSON::XS is surprisingly fast, as shown in the following 965It seems that JSON::XS is surprisingly fast, as shown in the following

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines