… | |
… | |
402 | |
402 | |
403 | For the more enlightened: note that in the following descriptions, |
403 | For the more enlightened: note that in the following descriptions, |
404 | lowercase I<perl> refers to the Perl interpreter, while uppcercase I<Perl> |
404 | lowercase I<perl> refers to the Perl interpreter, while uppcercase I<Perl> |
405 | refers to the abstract Perl language itself. |
405 | refers to the abstract Perl language itself. |
406 | |
406 | |
|
|
407 | |
407 | =head2 JSON -> PERL |
408 | =head2 JSON -> PERL |
408 | |
409 | |
409 | =over 4 |
410 | =over 4 |
410 | |
411 | |
411 | =item object |
412 | =item object |
… | |
… | |
441 | =item null |
442 | =item null |
442 | |
443 | |
443 | A JSON null atom becomes C<undef> in Perl. |
444 | A JSON null atom becomes C<undef> in Perl. |
444 | |
445 | |
445 | =back |
446 | =back |
|
|
447 | |
446 | |
448 | |
447 | =head2 PERL -> JSON |
449 | =head2 PERL -> JSON |
448 | |
450 | |
449 | The mapping from Perl to JSON is slightly more difficult, as Perl is a |
451 | The mapping from Perl to JSON is slightly more difficult, as Perl is a |
450 | truly typeless language, so we can only guess which JSON type is meant by |
452 | truly typeless language, so we can only guess which JSON type is meant by |
… | |
… | |
605 | |
607 | |
606 | Does not check input for validity. |
608 | Does not check input for validity. |
607 | |
609 | |
608 | =back |
610 | =back |
609 | |
611 | |
|
|
612 | |
|
|
613 | =head2 JSON and YAML |
|
|
614 | |
|
|
615 | You often hear that JSON is a subset (or a close subset) of YAML. This is, |
|
|
616 | however, a mass hysteria and very far from the truth. In general, there is |
|
|
617 | no way to configure JSON::XS to output a data structure as valid YAML. |
|
|
618 | |
|
|
619 | If you really must use JSON::XS to generate YAML, you should this |
|
|
620 | algorithm (subject to change in future versions): |
|
|
621 | |
|
|
622 | my $to_yaml = JSON::XS->new->utf8->space_after (1); |
|
|
623 | my $yaml = $to_yaml->encode ($ref) . "\n"; |
|
|
624 | |
|
|
625 | This will usually generate JSON texts that also parse as valid |
|
|
626 | YAML. Please note that YAML has hardcoded limits on object key lengths |
|
|
627 | that JSON doesn't have, so you should make sure that your hash keys are |
|
|
628 | noticably shorter than 1024 characters. |
|
|
629 | |
|
|
630 | There might be other incompatibilities that I am not aware of. In general |
|
|
631 | you should not try to generate YAML with a JSON generator or vice versa, |
|
|
632 | or try to parse JSON with a YAML parser or vice versa. |
|
|
633 | |
|
|
634 | |
610 | =head2 SPEED |
635 | =head2 SPEED |
611 | |
636 | |
612 | It seems that JSON::XS is surprisingly fast, as shown in the following |
637 | It seems that JSON::XS is surprisingly fast, as shown in the following |
613 | tables. They have been generated with the help of the C<eg/bench> program |
638 | tables. They have been generated with the help of the C<eg/bench> program |
614 | in the JSON::XS distribution, to make it easy to compare on your own |
639 | in the JSON::XS distribution, to make it easy to compare on your own |
… | |
… | |
618 | single-line JSON string: |
643 | single-line JSON string: |
619 | |
644 | |
620 | {"method": "handleMessage", "params": ["user1", "we were just talking"], \ |
645 | {"method": "handleMessage", "params": ["user1", "we were just talking"], \ |
621 | "id": null, "array":[1,11,234,-5,1e5,1e7, true, false]} |
646 | "id": null, "array":[1,11,234,-5,1e5,1e7, true, false]} |
622 | |
647 | |
623 | It shows the number of encodes/decodes per second (JSON::XS uses the |
648 | It shows the number of encodes/decodes per second (JSON::XS uses |
624 | functional interface, while JSON::XS/2 uses the OO interface with |
649 | the functional interface, while JSON::XS/2 uses the OO interface |
625 | pretty-printing and hashkey sorting enabled). Higher is better: |
650 | with pretty-printing and hashkey sorting enabled, JSON::XS/3 enables |
|
|
651 | shrink). Higher is better: |
626 | |
652 | |
627 | module | encode | decode | |
653 | module | encode | decode | |
628 | -----------|------------|------------| |
654 | -----------|------------|------------| |
629 | JSON | 7645.468 | 4208.613 | |
655 | JSON | 7645.468 | 4208.613 | |
630 | JSON::DWIW | 68534.379 | 79437.576 | |
656 | JSON::DWIW | 68534.379 | 79437.576 | |