… | |
… | |
905 | =back |
905 | =back |
906 | |
906 | |
907 | |
907 | |
908 | =head2 JSON and YAML |
908 | =head2 JSON and YAML |
909 | |
909 | |
910 | You often hear that JSON is a subset (or a close subset) of YAML. This is, |
910 | You often hear that JSON is a subset of YAML. This is, however, a mass |
911 | however, a mass hysteria and very far from the truth. In general, there is |
911 | hysteria and very far from the truth. In general, there is no way to |
912 | no way to configure JSON::XS to output a data structure as valid YAML. |
912 | configure JSON::XS to output a data structure as valid YAML that works for |
|
|
913 | all cases. |
913 | |
914 | |
914 | If you really must use JSON::XS to generate YAML, you should use this |
915 | If you really must use JSON::XS to generate YAML, you should use this |
915 | algorithm (subject to change in future versions): |
916 | algorithm (subject to change in future versions): |
916 | |
917 | |
917 | my $to_yaml = JSON::XS->new->utf8->space_after (1); |
918 | my $to_yaml = JSON::XS->new->utf8->space_after (1); |
918 | my $yaml = $to_yaml->encode ($ref) . "\n"; |
919 | my $yaml = $to_yaml->encode ($ref) . "\n"; |
919 | |
920 | |
920 | This will usually generate JSON texts that also parse as valid |
921 | This will usually generate JSON texts that also parse as valid |
921 | YAML. Please note that YAML has hardcoded limits on (simple) object key |
922 | YAML. Please note that YAML has hardcoded limits on (simple) object key |
922 | lengths that JSON doesn't have, so you should make sure that your hash |
923 | lengths that JSON doesn't have and also has different and incompatible |
|
|
924 | unicode handling, so you should make sure that your hash keys are |
923 | keys are noticeably shorter than the 1024 characters YAML allows. |
925 | noticeably shorter than the 1024 "stream characters" YAML allows and that |
|
|
926 | you do not have codepoints with values outside the Unicode BMP (basic |
|
|
927 | multilingual page). YAML also does not allow C<\/> sequences in strings |
|
|
928 | (which JSON::XS does not I<currently> generate). |
924 | |
929 | |
925 | There might be other incompatibilities that I am not aware of. In general |
930 | There might be other incompatibilities that I am not aware of. In general |
926 | you should not try to generate YAML with a JSON generator or vice versa, |
931 | you should not try to generate YAML with a JSON generator or vice versa, |
927 | or try to parse JSON with a YAML parser or vice versa: chances are high |
932 | or try to parse JSON with a YAML parser or vice versa: chances are high |
928 | that you will run into severe interoperability problems. |
933 | that you will run into severe interoperability problems when you least |
|
|
934 | expect it. |
929 | |
935 | |
930 | |
936 | |
931 | =head2 SPEED |
937 | =head2 SPEED |
932 | |
938 | |
933 | It seems that JSON::XS is surprisingly fast, as shown in the following |
939 | It seems that JSON::XS is surprisingly fast, as shown in the following |