• Home
  • History
  • Annotate
  • only in this directory
NameDateSize

..11-Apr-2013244

bin/H11-Apr-20133

ChangesH A D09-Mar-201014.9 KiB

COPYINGH A D09-Mar-201062

eg/H11-Apr-20133

Makefile.PLH A D09-Mar-2010416

MANIFESTH A D09-Mar-2010624

META.jsonH A D09-Mar-2010413

META.ymlH A D09-Mar-2010587

READMEH A D09-Mar-201059 KiB

t/H11-Apr-201326

typemapH A D09-Mar-2010315

XS/H11-Apr-20133

XS.pmH A D09-Mar-201054.9 KiB

XS.xsH A D09-Mar-201051.8 KiB

README

1NAME
2    JSON::XS - JSON serialising/deserialising, done correctly and fast
3
4    JSON::XS - 正しくて高速な JSON シリアライザ/デシリアライザ
5    (http://fleur.hio.jp/perldoc/mix/lib/JSON/XS.html)
6
7SYNOPSIS
8     use JSON::XS;
9
10     # exported functions, they croak on error
11     # and expect/generate UTF-8
12
13     $utf8_encoded_json_text = encode_json $perl_hash_or_arrayref;
14     $perl_hash_or_arrayref  = decode_json $utf8_encoded_json_text;
15
16     # OO-interface
17
18     $coder = JSON::XS->new->ascii->pretty->allow_nonref;
19     $pretty_printed_unencoded = $coder->encode ($perl_scalar);
20     $perl_scalar = $coder->decode ($unicode_json_text);
21
22     # Note that JSON version 2.0 and above will automatically use JSON::XS
23     # if available, at virtually no speed overhead either, so you should
24     # be able to just:
25 
26     use JSON;
27
28     # and do the same things, except that you have a pure-perl fallback now.
29
30DESCRIPTION
31    This module converts Perl data structures to JSON and vice versa. Its
32    primary goal is to be *correct* and its secondary goal is to be *fast*.
33    To reach the latter goal it was written in C.
34
35    Beginning with version 2.0 of the JSON module, when both JSON and
36    JSON::XS are installed, then JSON will fall back on JSON::XS (this can
37    be overridden) with no overhead due to emulation (by inheriting
38    constructor and methods). If JSON::XS is not available, it will fall
39    back to the compatible JSON::PP module as backend, so using JSON instead
40    of JSON::XS gives you a portable JSON API that can be fast when you need
41    and doesn't require a C compiler when that is a problem.
42
43    As this is the n-th-something JSON module on CPAN, what was the reason
44    to write yet another JSON module? While it seems there are many JSON
45    modules, none of them correctly handle all corner cases, and in most
46    cases their maintainers are unresponsive, gone missing, or not listening
47    to bug reports for other reasons.
48
49    See MAPPING, below, on how JSON::XS maps perl values to JSON values and
50    vice versa.
51
52  FEATURES
53    *   correct Unicode handling
54
55        This module knows how to handle Unicode, documents how and when it
56        does so, and even documents what "correct" means.
57
58    *   round-trip integrity
59
60        When you serialise a perl data structure using only data types
61        supported by JSON, the deserialised data structure is identical on
62        the Perl level. (e.g. the string "2.0" doesn't suddenly become "2"
63        just because it looks like a number). There minor *are* exceptions
64        to this, read the MAPPING section below to learn about those.
65
66    *   strict checking of JSON correctness
67
68        There is no guessing, no generating of illegal JSON texts by
69        default, and only JSON is accepted as input by default (the latter
70        is a security feature).
71
72    *   fast
73
74        Compared to other JSON modules and other serialisers such as
75        Storable, this module usually compares favourably in terms of speed,
76        too.
77
78    *   simple to use
79
80        This module has both a simple functional interface as well as an
81        object oriented interface interface.
82
83    *   reasonably versatile output formats
84
85        You can choose between the most compact guaranteed-single-line
86        format possible (nice for simple line-based protocols), a pure-ASCII
87        format (for when your transport is not 8-bit clean, still supports
88        the whole Unicode range), or a pretty-printed format (for when you
89        want to read that stuff). Or you can combine those features in
90        whatever way you like.
91
92FUNCTIONAL INTERFACE
93    The following convenience methods are provided by this module. They are
94    exported by default:
95
96    $json_text = encode_json $perl_scalar
97        Converts the given Perl data structure to a UTF-8 encoded, binary
98        string (that is, the string contains octets only). Croaks on error.
99
100        This function call is functionally identical to:
101
102           $json_text = JSON::XS->new->utf8->encode ($perl_scalar)
103
104        Except being faster.
105
106    $perl_scalar = decode_json $json_text
107        The opposite of "encode_json": expects an UTF-8 (binary) string and
108        tries to parse that as an UTF-8 encoded JSON text, returning the
109        resulting reference. Croaks on error.
110
111        This function call is functionally identical to:
112
113           $perl_scalar = JSON::XS->new->utf8->decode ($json_text)
114
115        Except being faster.
116
117    $is_boolean = JSON::XS::is_bool $scalar
118        Returns true if the passed scalar represents either JSON::XS::true
119        or JSON::XS::false, two constants that act like 1 and 0,
120        respectively and are used to represent JSON "true" and "false"
121        values in Perl.
122
123        See MAPPING, below, for more information on how JSON values are
124        mapped to Perl.
125
126A FEW NOTES ON UNICODE AND PERL
127    Since this often leads to confusion, here are a few very clear words on
128    how Unicode works in Perl, modulo bugs.
129
130    1. Perl strings can store characters with ordinal values > 255.
131        This enables you to store Unicode characters as single characters in
132        a Perl string - very natural.
133
134    2. Perl does *not* associate an encoding with your strings.
135        ... until you force it to, e.g. when matching it against a regex, or
136        printing the scalar to a file, in which case Perl either interprets
137        your string as locale-encoded text, octets/binary, or as Unicode,
138        depending on various settings. In no case is an encoding stored
139        together with your data, it is *use* that decides encoding, not any
140        magical meta data.
141
142    3. The internal utf-8 flag has no meaning with regards to the encoding
143    of your string.
144        Just ignore that flag unless you debug a Perl bug, a module written
145        in XS or want to dive into the internals of perl. Otherwise it will
146        only confuse you, as, despite the name, it says nothing about how
147        your string is encoded. You can have Unicode strings with that flag
148        set, with that flag clear, and you can have binary data with that
149        flag set and that flag clear. Other possibilities exist, too.
150
151        If you didn't know about that flag, just the better, pretend it
152        doesn't exist.
153
154    4. A "Unicode String" is simply a string where each character can be
155    validly interpreted as a Unicode code point.
156        If you have UTF-8 encoded data, it is no longer a Unicode string,
157        but a Unicode string encoded in UTF-8, giving you a binary string.
158
159    5. A string containing "high" (> 255) character values is *not* a UTF-8
160    string.
161        It's a fact. Learn to live with it.
162
163    I hope this helps :)
164
165OBJECT-ORIENTED INTERFACE
166    The object oriented interface lets you configure your own encoding or
167    decoding style, within the limits of supported formats.
168
169    $json = new JSON::XS
170        Creates a new JSON::XS object that can be used to de/encode JSON
171        strings. All boolean flags described below are by default
172        *disabled*.
173
174        The mutators for flags all return the JSON object again and thus
175        calls can be chained:
176
177           my $json = JSON::XS->new->utf8->space_after->encode ({a => [1,2]})
178           => {"a": [1, 2]}
179
180    $json = $json->ascii ([$enable])
181    $enabled = $json->get_ascii
182        If $enable is true (or missing), then the "encode" method will not
183        generate characters outside the code range 0..127 (which is ASCII).
184        Any Unicode characters outside that range will be escaped using
185        either a single \uXXXX (BMP characters) or a double \uHHHH\uLLLLL
186        escape sequence, as per RFC4627. The resulting encoded JSON text can
187        be treated as a native Unicode string, an ascii-encoded,
188        latin1-encoded or UTF-8 encoded string, or any other superset of
189        ASCII.
190
191        If $enable is false, then the "encode" method will not escape
192        Unicode characters unless required by the JSON syntax or other
193        flags. This results in a faster and more compact format.
194
195        See also the section *ENCODING/CODESET FLAG NOTES* later in this
196        document.
197
198        The main use for this flag is to produce JSON texts that can be
199        transmitted over a 7-bit channel, as the encoded JSON texts will not
200        contain any 8 bit characters.
201
202          JSON::XS->new->ascii (1)->encode ([chr 0x10401])
203          => ["\ud801\udc01"]
204
205    $json = $json->latin1 ([$enable])
206    $enabled = $json->get_latin1
207        If $enable is true (or missing), then the "encode" method will
208        encode the resulting JSON text as latin1 (or iso-8859-1), escaping
209        any characters outside the code range 0..255. The resulting string
210        can be treated as a latin1-encoded JSON text or a native Unicode
211        string. The "decode" method will not be affected in any way by this
212        flag, as "decode" by default expects Unicode, which is a strict
213        superset of latin1.
214
215        If $enable is false, then the "encode" method will not escape
216        Unicode characters unless required by the JSON syntax or other
217        flags.
218
219        See also the section *ENCODING/CODESET FLAG NOTES* later in this
220        document.
221
222        The main use for this flag is efficiently encoding binary data as
223        JSON text, as most octets will not be escaped, resulting in a
224        smaller encoded size. The disadvantage is that the resulting JSON
225        text is encoded in latin1 (and must correctly be treated as such
226        when storing and transferring), a rare encoding for JSON. It is
227        therefore most useful when you want to store data structures known
228        to contain binary data efficiently in files or databases, not when
229        talking to other JSON encoders/decoders.
230
231          JSON::XS->new->latin1->encode (["\x{89}\x{abc}"]
232          => ["\x{89}\\u0abc"]    # (perl syntax, U+abc escaped, U+89 not)
233
234    $json = $json->utf8 ([$enable])
235    $enabled = $json->get_utf8
236        If $enable is true (or missing), then the "encode" method will
237        encode the JSON result into UTF-8, as required by many protocols,
238        while the "decode" method expects to be handled an UTF-8-encoded
239        string. Please note that UTF-8-encoded strings do not contain any
240        characters outside the range 0..255, they are thus useful for
241        bytewise/binary I/O. In future versions, enabling this option might
242        enable autodetection of the UTF-16 and UTF-32 encoding families, as
243        described in RFC4627.
244
245        If $enable is false, then the "encode" method will return the JSON
246        string as a (non-encoded) Unicode string, while "decode" expects
247        thus a Unicode string. Any decoding or encoding (e.g. to UTF-8 or
248        UTF-16) needs to be done yourself, e.g. using the Encode module.
249
250        See also the section *ENCODING/CODESET FLAG NOTES* later in this
251        document.
252
253        Example, output UTF-16BE-encoded JSON:
254
255          use Encode;
256          $jsontext = encode "UTF-16BE", JSON::XS->new->encode ($object);
257
258        Example, decode UTF-32LE-encoded JSON:
259
260          use Encode;
261          $object = JSON::XS->new->decode (decode "UTF-32LE", $jsontext);
262
263    $json = $json->pretty ([$enable])
264        This enables (or disables) all of the "indent", "space_before" and
265        "space_after" (and in the future possibly more) flags in one call to
266        generate the most readable (or most compact) form possible.
267
268        Example, pretty-print some simple structure:
269
270           my $json = JSON::XS->new->pretty(1)->encode ({a => [1,2]})
271           =>
272           {
273              "a" : [
274                 1,
275                 2
276              ]
277           }
278
279    $json = $json->indent ([$enable])
280    $enabled = $json->get_indent
281        If $enable is true (or missing), then the "encode" method will use a
282        multiline format as output, putting every array member or
283        object/hash key-value pair into its own line, indenting them
284        properly.
285
286        If $enable is false, no newlines or indenting will be produced, and
287        the resulting JSON text is guaranteed not to contain any "newlines".
288
289        This setting has no effect when decoding JSON texts.
290
291    $json = $json->space_before ([$enable])
292    $enabled = $json->get_space_before
293        If $enable is true (or missing), then the "encode" method will add
294        an extra optional space before the ":" separating keys from values
295        in JSON objects.
296
297        If $enable is false, then the "encode" method will not add any extra
298        space at those places.
299
300        This setting has no effect when decoding JSON texts. You will also
301        most likely combine this setting with "space_after".
302
303        Example, space_before enabled, space_after and indent disabled:
304
305           {"key" :"value"}
306
307    $json = $json->space_after ([$enable])
308    $enabled = $json->get_space_after
309        If $enable is true (or missing), then the "encode" method will add
310        an extra optional space after the ":" separating keys from values in
311        JSON objects and extra whitespace after the "," separating key-value
312        pairs and array members.
313
314        If $enable is false, then the "encode" method will not add any extra
315        space at those places.
316
317        This setting has no effect when decoding JSON texts.
318
319        Example, space_before and indent disabled, space_after enabled:
320
321           {"key": "value"}
322
323    $json = $json->relaxed ([$enable])
324    $enabled = $json->get_relaxed
325        If $enable is true (or missing), then "decode" will accept some
326        extensions to normal JSON syntax (see below). "encode" will not be
327        affected in anyway. *Be aware that this option makes you accept
328        invalid JSON texts as if they were valid!*. I suggest only to use
329        this option to parse application-specific files written by humans
330        (configuration files, resource files etc.)
331
332        If $enable is false (the default), then "decode" will only accept
333        valid JSON texts.
334
335        Currently accepted extensions are:
336
337        *   list items can have an end-comma
338
339            JSON *separates* array elements and key-value pairs with commas.
340            This can be annoying if you write JSON texts manually and want
341            to be able to quickly append elements, so this extension accepts
342            comma at the end of such items not just between them:
343
344               [
345                  1,
346                  2, <- this comma not normally allowed
347               ]
348               {
349                  "k1": "v1",
350                  "k2": "v2", <- this comma not normally allowed
351               }
352
353        *   shell-style '#'-comments
354
355            Whenever JSON allows whitespace, shell-style comments are
356            additionally allowed. They are terminated by the first
357            carriage-return or line-feed character, after which more
358            white-space and comments are allowed.
359
360              [
361                 1, # this comment not allowed in JSON
362                    # neither this one...
363              ]
364
365    $json = $json->canonical ([$enable])
366    $enabled = $json->get_canonical
367        If $enable is true (or missing), then the "encode" method will
368        output JSON objects by sorting their keys. This is adding a
369        comparatively high overhead.
370
371        If $enable is false, then the "encode" method will output key-value
372        pairs in the order Perl stores them (which will likely change
373        between runs of the same script).
374
375        This option is useful if you want the same data structure to be
376        encoded as the same JSON text (given the same overall settings). If
377        it is disabled, the same hash might be encoded differently even if
378        contains the same data, as key-value pairs have no inherent ordering
379        in Perl.
380
381        This setting has no effect when decoding JSON texts.
382
383        This setting has currently no effect on tied hashes.
384
385    $json = $json->allow_nonref ([$enable])
386    $enabled = $json->get_allow_nonref
387        If $enable is true (or missing), then the "encode" method can
388        convert a non-reference into its corresponding string, number or
389        null JSON value, which is an extension to RFC4627. Likewise,
390        "decode" will accept those JSON values instead of croaking.
391
392        If $enable is false, then the "encode" method will croak if it isn't
393        passed an arrayref or hashref, as JSON texts must either be an
394        object or array. Likewise, "decode" will croak if given something
395        that is not a JSON object or array.
396
397        Example, encode a Perl scalar as JSON value with enabled
398        "allow_nonref", resulting in an invalid JSON text:
399
400           JSON::XS->new->allow_nonref->encode ("Hello, World!")
401           => "Hello, World!"
402
403    $json = $json->allow_unknown ([$enable])
404    $enabled = $json->get_allow_unknown
405        If $enable is true (or missing), then "encode" will *not* throw an
406        exception when it encounters values it cannot represent in JSON (for
407        example, filehandles) but instead will encode a JSON "null" value.
408        Note that blessed objects are not included here and are handled
409        separately by c<allow_nonref>.
410
411        If $enable is false (the default), then "encode" will throw an
412        exception when it encounters anything it cannot encode as JSON.
413
414        This option does not affect "decode" in any way, and it is
415        recommended to leave it off unless you know your communications
416        partner.
417
418    $json = $json->allow_blessed ([$enable])
419    $enabled = $json->get_allow_blessed
420        If $enable is true (or missing), then the "encode" method will not
421        barf when it encounters a blessed reference. Instead, the value of
422        the convert_blessed option will decide whether "null"
423        ("convert_blessed" disabled or no "TO_JSON" method found) or a
424        representation of the object ("convert_blessed" enabled and
425        "TO_JSON" method found) is being encoded. Has no effect on "decode".
426
427        If $enable is false (the default), then "encode" will throw an
428        exception when it encounters a blessed object.
429
430    $json = $json->convert_blessed ([$enable])
431    $enabled = $json->get_convert_blessed
432        If $enable is true (or missing), then "encode", upon encountering a
433        blessed object, will check for the availability of the "TO_JSON"
434        method on the object's class. If found, it will be called in scalar
435        context and the resulting scalar will be encoded instead of the
436        object. If no "TO_JSON" method is found, the value of
437        "allow_blessed" will decide what to do.
438
439        The "TO_JSON" method may safely call die if it wants. If "TO_JSON"
440        returns other blessed objects, those will be handled in the same
441        way. "TO_JSON" must take care of not causing an endless recursion
442        cycle (== crash) in this case. The name of "TO_JSON" was chosen
443        because other methods called by the Perl core (== not by the user of
444        the object) are usually in upper case letters and to avoid
445        collisions with any "to_json" function or method.
446
447        This setting does not yet influence "decode" in any way, but in the
448        future, global hooks might get installed that influence "decode" and
449        are enabled by this setting.
450
451        If $enable is false, then the "allow_blessed" setting will decide
452        what to do when a blessed object is found.
453
454    $json = $json->filter_json_object ([$coderef->($hashref)])
455        When $coderef is specified, it will be called from "decode" each
456        time it decodes a JSON object. The only argument is a reference to
457        the newly-created hash. If the code references returns a single
458        scalar (which need not be a reference), this value (i.e. a copy of
459        that scalar to avoid aliasing) is inserted into the deserialised
460        data structure. If it returns an empty list (NOTE: *not* "undef",
461        which is a valid scalar), the original deserialised hash will be
462        inserted. This setting can slow down decoding considerably.
463
464        When $coderef is omitted or undefined, any existing callback will be
465        removed and "decode" will not change the deserialised hash in any
466        way.
467
468        Example, convert all JSON objects into the integer 5:
469
470           my $js = JSON::XS->new->filter_json_object (sub { 5 });
471           # returns [5]
472           $js->decode ('[{}]')
473           # throw an exception because allow_nonref is not enabled
474           # so a lone 5 is not allowed.
475           $js->decode ('{"a":1, "b":2}');
476
477    $json = $json->filter_json_single_key_object ($key [=>
478    $coderef->($value)])
479        Works remotely similar to "filter_json_object", but is only called
480        for JSON objects having a single key named $key.
481
482        This $coderef is called before the one specified via
483        "filter_json_object", if any. It gets passed the single value in the
484        JSON object. If it returns a single value, it will be inserted into
485        the data structure. If it returns nothing (not even "undef" but the
486        empty list), the callback from "filter_json_object" will be called
487        next, as if no single-key callback were specified.
488
489        If $coderef is omitted or undefined, the corresponding callback will
490        be disabled. There can only ever be one callback for a given key.
491
492        As this callback gets called less often then the
493        "filter_json_object" one, decoding speed will not usually suffer as
494        much. Therefore, single-key objects make excellent targets to
495        serialise Perl objects into, especially as single-key JSON objects
496        are as close to the type-tagged value concept as JSON gets (it's
497        basically an ID/VALUE tuple). Of course, JSON does not support this
498        in any way, so you need to make sure your data never looks like a
499        serialised Perl hash.
500
501        Typical names for the single object key are "__class_whatever__", or
502        "$__dollars_are_rarely_used__$" or "}ugly_brace_placement", or even
503        things like "__class_md5sum(classname)__", to reduce the risk of
504        clashing with real hashes.
505
506        Example, decode JSON objects of the form "{ "__widget__" => <id> }"
507        into the corresponding $WIDGET{<id>} object:
508
509           # return whatever is in $WIDGET{5}:
510           JSON::XS
511              ->new
512              ->filter_json_single_key_object (__widget__ => sub {
513                    $WIDGET{ $_[0] }
514                 })
515              ->decode ('{"__widget__": 5')
516
517           # this can be used with a TO_JSON method in some "widget" class
518           # for serialisation to json:
519           sub WidgetBase::TO_JSON {
520              my ($self) = @_;
521
522              unless ($self->{id}) {
523                 $self->{id} = ..get..some..id..;
524                 $WIDGET{$self->{id}} = $self;
525              }
526
527              { __widget__ => $self->{id} }
528           }
529
530    $json = $json->shrink ([$enable])
531    $enabled = $json->get_shrink
532        Perl usually over-allocates memory a bit when allocating space for
533        strings. This flag optionally resizes strings generated by either
534        "encode" or "decode" to their minimum size possible. This can save
535        memory when your JSON texts are either very very long or you have
536        many short strings. It will also try to downgrade any strings to
537        octet-form if possible: perl stores strings internally either in an
538        encoding called UTF-X or in octet-form. The latter cannot store
539        everything but uses less space in general (and some buggy Perl or C
540        code might even rely on that internal representation being used).
541
542        The actual definition of what shrink does might change in future
543        versions, but it will always try to save space at the expense of
544        time.
545
546        If $enable is true (or missing), the string returned by "encode"
547        will be shrunk-to-fit, while all strings generated by "decode" will
548        also be shrunk-to-fit.
549
550        If $enable is false, then the normal perl allocation algorithms are
551        used. If you work with your data, then this is likely to be faster.
552
553        In the future, this setting might control other things, such as
554        converting strings that look like integers or floats into integers
555        or floats internally (there is no difference on the Perl level),
556        saving space.
557
558    $json = $json->max_depth ([$maximum_nesting_depth])
559    $max_depth = $json->get_max_depth
560        Sets the maximum nesting level (default 512) accepted while encoding
561        or decoding. If a higher nesting level is detected in JSON text or a
562        Perl data structure, then the encoder and decoder will stop and
563        croak at that point.
564
565        Nesting level is defined by number of hash- or arrayrefs that the
566        encoder needs to traverse to reach a given point or the number of
567        "{" or "[" characters without their matching closing parenthesis
568        crossed to reach a given character in a string.
569
570        Setting the maximum depth to one disallows any nesting, so that
571        ensures that the object is only a single hash/object or array.
572
573        If no argument is given, the highest possible setting will be used,
574        which is rarely useful.
575
576        Note that nesting is implemented by recursion in C. The default
577        value has been chosen to be as large as typical operating systems
578        allow without crashing.
579
580        See SECURITY CONSIDERATIONS, below, for more info on why this is
581        useful.
582
583    $json = $json->max_size ([$maximum_string_size])
584    $max_size = $json->get_max_size
585        Set the maximum length a JSON text may have (in bytes) where
586        decoding is being attempted. The default is 0, meaning no limit.
587        When "decode" is called on a string that is longer then this many
588        bytes, it will not attempt to decode the string but throw an
589        exception. This setting has no effect on "encode" (yet).
590
591        If no argument is given, the limit check will be deactivated (same
592        as when 0 is specified).
593
594        See SECURITY CONSIDERATIONS, below, for more info on why this is
595        useful.
596
597    $json_text = $json->encode ($perl_scalar)
598        Converts the given Perl data structure (a simple scalar or a
599        reference to a hash or array) to its JSON representation. Simple
600        scalars will be converted into JSON string or number sequences,
601        while references to arrays become JSON arrays and references to
602        hashes become JSON objects. Undefined Perl values (e.g. "undef")
603        become JSON "null" values. Neither "true" nor "false" values will be
604        generated.
605
606    $perl_scalar = $json->decode ($json_text)
607        The opposite of "encode": expects a JSON text and tries to parse it,
608        returning the resulting simple scalar or reference. Croaks on error.
609
610        JSON numbers and strings become simple Perl scalars. JSON arrays
611        become Perl arrayrefs and JSON objects become Perl hashrefs. "true"
612        becomes 1, "false" becomes 0 and "null" becomes "undef".
613
614    ($perl_scalar, $characters) = $json->decode_prefix ($json_text)
615        This works like the "decode" method, but instead of raising an
616        exception when there is trailing garbage after the first JSON
617        object, it will silently stop parsing there and return the number of
618        characters consumed so far.
619
620        This is useful if your JSON texts are not delimited by an outer
621        protocol (which is not the brightest thing to do in the first place)
622        and you need to know where the JSON text ends.
623
624           JSON::XS->new->decode_prefix ("[1] the tail")
625           => ([], 3)
626
627INCREMENTAL PARSING
628    In some cases, there is the need for incremental parsing of JSON texts.
629    While this module always has to keep both JSON text and resulting Perl
630    data structure in memory at one time, it does allow you to parse a JSON
631    stream incrementally. It does so by accumulating text until it has a
632    full JSON object, which it then can decode. This process is similar to
633    using "decode_prefix" to see if a full JSON object is available, but is
634    much more efficient (and can be implemented with a minimum of method
635    calls).
636
637    JSON::XS will only attempt to parse the JSON text once it is sure it has
638    enough text to get a decisive result, using a very simple but truly
639    incremental parser. This means that it sometimes won't stop as early as
640    the full parser, for example, it doesn't detect parenthese mismatches.
641    The only thing it guarantees is that it starts decoding as soon as a
642    syntactically valid JSON text has been seen. This means you need to set
643    resource limits (e.g. "max_size") to ensure the parser will stop parsing
644    in the presence if syntax errors.
645
646    The following methods implement this incremental parser.
647
648    [void, scalar or list context] = $json->incr_parse ([$string])
649        This is the central parsing function. It can both append new text
650        and extract objects from the stream accumulated so far (both of
651        these functions are optional).
652
653        If $string is given, then this string is appended to the already
654        existing JSON fragment stored in the $json object.
655
656        After that, if the function is called in void context, it will
657        simply return without doing anything further. This can be used to
658        add more text in as many chunks as you want.
659
660        If the method is called in scalar context, then it will try to
661        extract exactly *one* JSON object. If that is successful, it will
662        return this object, otherwise it will return "undef". If there is a
663        parse error, this method will croak just as "decode" would do (one
664        can then use "incr_skip" to skip the errornous part). This is the
665        most common way of using the method.
666
667        And finally, in list context, it will try to extract as many objects
668        from the stream as it can find and return them, or the empty list
669        otherwise. For this to work, there must be no separators between the
670        JSON objects or arrays, instead they must be concatenated
671        back-to-back. If an error occurs, an exception will be raised as in
672        the scalar context case. Note that in this case, any
673        previously-parsed JSON texts will be lost.
674
675    $lvalue_string = $json->incr_text
676        This method returns the currently stored JSON fragment as an lvalue,
677        that is, you can manipulate it. This *only* works when a preceding
678        call to "incr_parse" in *scalar context* successfully returned an
679        object. Under all other circumstances you must not call this
680        function (I mean it. although in simple tests it might actually
681        work, it *will* fail under real world conditions). As a special
682        exception, you can also call this method before having parsed
683        anything.
684
685        This function is useful in two cases: a) finding the trailing text
686        after a JSON object or b) parsing multiple JSON objects separated by
687        non-JSON text (such as commas).
688
689    $json->incr_skip
690        This will reset the state of the incremental parser and will remove
691        the parsed text from the input buffer so far. This is useful after
692        "incr_parse" died, in which case the input buffer and incremental
693        parser state is left unchanged, to skip the text parsed so far and
694        to reset the parse state.
695
696        The difference to "incr_reset" is that only text until the parse
697        error occured is removed.
698
699    $json->incr_reset
700        This completely resets the incremental parser, that is, after this
701        call, it will be as if the parser had never parsed anything.
702
703        This is useful if you want to repeatedly parse JSON objects and want
704        to ignore any trailing data, which means you have to reset the
705        parser after each successful decode.
706
707  LIMITATIONS
708    All options that affect decoding are supported, except "allow_nonref".
709    The reason for this is that it cannot be made to work sensibly: JSON
710    objects and arrays are self-delimited, i.e. you can concatenate them
711    back to back and still decode them perfectly. This does not hold true
712    for JSON numbers, however.
713
714    For example, is the string 1 a single JSON number, or is it simply the
715    start of 12? Or is 12 a single JSON number, or the concatenation of 1
716    and 2? In neither case you can tell, and this is why JSON::XS takes the
717    conservative route and disallows this case.
718
719  EXAMPLES
720    Some examples will make all this clearer. First, a simple example that
721    works similarly to "decode_prefix": We want to decode the JSON object at
722    the start of a string and identify the portion after the JSON object:
723
724       my $text = "[1,2,3] hello";
725
726       my $json = new JSON::XS;
727
728       my $obj = $json->incr_parse ($text)
729          or die "expected JSON object or array at beginning of string";
730
731       my $tail = $json->incr_text;
732       # $tail now contains " hello"
733
734    Easy, isn't it?
735
736    Now for a more complicated example: Imagine a hypothetical protocol
737    where you read some requests from a TCP stream, and each request is a
738    JSON array, without any separation between them (in fact, it is often
739    useful to use newlines as "separators", as these get interpreted as
740    whitespace at the start of the JSON text, which makes it possible to
741    test said protocol with "telnet"...).
742
743    Here is how you'd do it (it is trivial to write this in an event-based
744    manner):
745
746       my $json = new JSON::XS;
747
748       # read some data from the socket
749       while (sysread $socket, my $buf, 4096) {
750
751          # split and decode as many requests as possible
752          for my $request ($json->incr_parse ($buf)) {
753             # act on the $request
754          }
755       }
756
757    Another complicated example: Assume you have a string with JSON objects
758    or arrays, all separated by (optional) comma characters (e.g. "[1],[2],
759    [3]"). To parse them, we have to skip the commas between the JSON texts,
760    and here is where the lvalue-ness of "incr_text" comes in useful:
761
762       my $text = "[1],[2], [3]";
763       my $json = new JSON::XS;
764
765       # void context, so no parsing done
766       $json->incr_parse ($text);
767
768       # now extract as many objects as possible. note the
769       # use of scalar context so incr_text can be called.
770       while (my $obj = $json->incr_parse) {
771          # do something with $obj
772
773          # now skip the optional comma
774          $json->incr_text =~ s/^ \s* , //x;
775       }
776
777    Now lets go for a very complex example: Assume that you have a gigantic
778    JSON array-of-objects, many gigabytes in size, and you want to parse it,
779    but you cannot load it into memory fully (this has actually happened in
780    the real world :).
781
782    Well, you lost, you have to implement your own JSON parser. But JSON::XS
783    can still help you: You implement a (very simple) array parser and let
784    JSON decode the array elements, which are all full JSON objects on their
785    own (this wouldn't work if the array elements could be JSON numbers, for
786    example):
787
788       my $json = new JSON::XS;
789
790       # open the monster
791       open my $fh, "<bigfile.json"
792          or die "bigfile: $!";
793
794       # first parse the initial "["
795       for (;;) {
796          sysread $fh, my $buf, 65536
797             or die "read error: $!";
798          $json->incr_parse ($buf); # void context, so no parsing
799
800          # Exit the loop once we found and removed(!) the initial "[".
801          # In essence, we are (ab-)using the $json object as a simple scalar
802          # we append data to.
803          last if $json->incr_text =~ s/^ \s* \[ //x;
804       }
805
806       # now we have the skipped the initial "[", so continue
807       # parsing all the elements.
808       for (;;) {
809          # in this loop we read data until we got a single JSON object
810          for (;;) {
811             if (my $obj = $json->incr_parse) {
812                # do something with $obj
813                last;
814             }
815
816             # add more data
817             sysread $fh, my $buf, 65536
818                or die "read error: $!";
819             $json->incr_parse ($buf); # void context, so no parsing
820          }
821
822          # in this loop we read data until we either found and parsed the
823          # separating "," between elements, or the final "]"
824          for (;;) {
825             # first skip whitespace
826             $json->incr_text =~ s/^\s*//;
827
828             # if we find "]", we are done
829             if ($json->incr_text =~ s/^\]//) {
830                print "finished.\n";
831                exit;
832             }
833
834             # if we find ",", we can continue with the next element
835             if ($json->incr_text =~ s/^,//) {
836                last;
837             }
838
839             # if we find anything else, we have a parse error!
840             if (length $json->incr_text) {
841                die "parse error near ", $json->incr_text;
842             }
843
844             # else add more data
845             sysread $fh, my $buf, 65536
846                or die "read error: $!";
847             $json->incr_parse ($buf); # void context, so no parsing
848          }
849
850    This is a complex example, but most of the complexity comes from the
851    fact that we are trying to be correct (bear with me if I am wrong, I
852    never ran the above example :).
853
854MAPPING
855    This section describes how JSON::XS maps Perl values to JSON values and
856    vice versa. These mappings are designed to "do the right thing" in most
857    circumstances automatically, preserving round-tripping characteristics
858    (what you put in comes out as something equivalent).
859
860    For the more enlightened: note that in the following descriptions,
861    lowercase *perl* refers to the Perl interpreter, while uppercase *Perl*
862    refers to the abstract Perl language itself.
863
864  JSON -> PERL
865    object
866        A JSON object becomes a reference to a hash in Perl. No ordering of
867        object keys is preserved (JSON does not preserve object key ordering
868        itself).
869
870    array
871        A JSON array becomes a reference to an array in Perl.
872
873    string
874        A JSON string becomes a string scalar in Perl - Unicode codepoints
875        in JSON are represented by the same codepoints in the Perl string,
876        so no manual decoding is necessary.
877
878    number
879        A JSON number becomes either an integer, numeric (floating point) or
880        string scalar in perl, depending on its range and any fractional
881        parts. On the Perl level, there is no difference between those as
882        Perl handles all the conversion details, but an integer may take
883        slightly less memory and might represent more values exactly than
884        floating point numbers.
885
886        If the number consists of digits only, JSON::XS will try to
887        represent it as an integer value. If that fails, it will try to
888        represent it as a numeric (floating point) value if that is possible
889        without loss of precision. Otherwise it will preserve the number as
890        a string value (in which case you lose roundtripping ability, as the
891        JSON number will be re-encoded toa JSON string).
892
893        Numbers containing a fractional or exponential part will always be
894        represented as numeric (floating point) values, possibly at a loss
895        of precision (in which case you might lose perfect roundtripping
896        ability, but the JSON number will still be re-encoded as a JSON
897        number).
898
899    true, false
900        These JSON atoms become "JSON::XS::true" and "JSON::XS::false",
901        respectively. They are overloaded to act almost exactly like the
902        numbers 1 and 0. You can check whether a scalar is a JSON boolean by
903        using the "JSON::XS::is_bool" function.
904
905    null
906        A JSON null atom becomes "undef" in Perl.
907
908  PERL -> JSON
909    The mapping from Perl to JSON is slightly more difficult, as Perl is a
910    truly typeless language, so we can only guess which JSON type is meant
911    by a Perl value.
912
913    hash references
914        Perl hash references become JSON objects. As there is no inherent
915        ordering in hash keys (or JSON objects), they will usually be
916        encoded in a pseudo-random order that can change between runs of the
917        same program but stays generally the same within a single run of a
918        program. JSON::XS can optionally sort the hash keys (determined by
919        the *canonical* flag), so the same datastructure will serialise to
920        the same JSON text (given same settings and version of JSON::XS),
921        but this incurs a runtime overhead and is only rarely useful, e.g.
922        when you want to compare some JSON text against another for
923        equality.
924
925    array references
926        Perl array references become JSON arrays.
927
928    other references
929        Other unblessed references are generally not allowed and will cause
930        an exception to be thrown, except for references to the integers 0
931        and 1, which get turned into "false" and "true" atoms in JSON. You
932        can also use "JSON::XS::false" and "JSON::XS::true" to improve
933        readability.
934
935           encode_json [\0, JSON::XS::true]      # yields [false,true]
936
937    JSON::XS::true, JSON::XS::false
938        These special values become JSON true and JSON false values,
939        respectively. You can also use "\1" and "\0" directly if you want.
940
941    blessed objects
942        Blessed objects are not directly representable in JSON. See the
943        "allow_blessed" and "convert_blessed" methods on various options on
944        how to deal with this: basically, you can choose between throwing an
945        exception, encoding the reference as if it weren't blessed, or
946        provide your own serialiser method.
947
948    simple scalars
949        Simple Perl scalars (any scalar that is not a reference) are the
950        most difficult objects to encode: JSON::XS will encode undefined
951        scalars as JSON "null" values, scalars that have last been used in a
952        string context before encoding as JSON strings, and anything else as
953        number value:
954
955           # dump as number
956           encode_json [2]                      # yields [2]
957           encode_json [-3.0e17]                # yields [-3e+17]
958           my $value = 5; encode_json [$value]  # yields [5]
959
960           # used as string, so dump as string
961           print $value;
962           encode_json [$value]                 # yields ["5"]
963
964           # undef becomes null
965           encode_json [undef]                  # yields [null]
966
967        You can force the type to be a JSON string by stringifying it:
968
969           my $x = 3.1; # some variable containing a number
970           "$x";        # stringified
971           $x .= "";    # another, more awkward way to stringify
972           print $x;    # perl does it for you, too, quite often
973
974        You can force the type to be a JSON number by numifying it:
975
976           my $x = "3"; # some variable containing a string
977           $x += 0;     # numify it, ensuring it will be dumped as a number
978           $x *= 1;     # same thing, the choice is yours.
979
980        You can not currently force the type in other, less obscure, ways.
981        Tell me if you need this capability (but don't forget to explain why
982        it's needed :).
983
984ENCODING/CODESET FLAG NOTES
985    The interested reader might have seen a number of flags that signify
986    encodings or codesets - "utf8", "latin1" and "ascii". There seems to be
987    some confusion on what these do, so here is a short comparison:
988
989    "utf8" controls whether the JSON text created by "encode" (and expected
990    by "decode") is UTF-8 encoded or not, while "latin1" and "ascii" only
991    control whether "encode" escapes character values outside their
992    respective codeset range. Neither of these flags conflict with each
993    other, although some combinations make less sense than others.
994
995    Care has been taken to make all flags symmetrical with respect to
996    "encode" and "decode", that is, texts encoded with any combination of
997    these flag values will be correctly decoded when the same flags are used
998    - in general, if you use different flag settings while encoding vs. when
999    decoding you likely have a bug somewhere.
1000
1001    Below comes a verbose discussion of these flags. Note that a "codeset"
1002    is simply an abstract set of character-codepoint pairs, while an
1003    encoding takes those codepoint numbers and *encodes* them, in our case
1004    into octets. Unicode is (among other things) a codeset, UTF-8 is an
1005    encoding, and ISO-8859-1 (= latin 1) and ASCII are both codesets *and*
1006    encodings at the same time, which can be confusing.
1007
1008    "utf8" flag disabled
1009        When "utf8" is disabled (the default), then "encode"/"decode"
1010        generate and expect Unicode strings, that is, characters with high
1011        ordinal Unicode values (> 255) will be encoded as such characters,
1012        and likewise such characters are decoded as-is, no canges to them
1013        will be done, except "(re-)interpreting" them as Unicode codepoints
1014        or Unicode characters, respectively (to Perl, these are the same
1015        thing in strings unless you do funny/weird/dumb stuff).
1016
1017        This is useful when you want to do the encoding yourself (e.g. when
1018        you want to have UTF-16 encoded JSON texts) or when some other layer
1019        does the encoding for you (for example, when printing to a terminal
1020        using a filehandle that transparently encodes to UTF-8 you certainly
1021        do NOT want to UTF-8 encode your data first and have Perl encode it
1022        another time).
1023
1024    "utf8" flag enabled
1025        If the "utf8"-flag is enabled, "encode"/"decode" will encode all
1026        characters using the corresponding UTF-8 multi-byte sequence, and
1027        will expect your input strings to be encoded as UTF-8, that is, no
1028        "character" of the input string must have any value > 255, as UTF-8
1029        does not allow that.
1030
1031        The "utf8" flag therefore switches between two modes: disabled means
1032        you will get a Unicode string in Perl, enabled means you get an
1033        UTF-8 encoded octet/binary string in Perl.
1034
1035    "latin1" or "ascii" flags enabled
1036        With "latin1" (or "ascii") enabled, "encode" will escape characters
1037        with ordinal values > 255 (> 127 with "ascii") and encode the
1038        remaining characters as specified by the "utf8" flag.
1039
1040        If "utf8" is disabled, then the result is also correctly encoded in
1041        those character sets (as both are proper subsets of Unicode, meaning
1042        that a Unicode string with all character values < 256 is the same
1043        thing as a ISO-8859-1 string, and a Unicode string with all
1044        character values < 128 is the same thing as an ASCII string in
1045        Perl).
1046
1047        If "utf8" is enabled, you still get a correct UTF-8-encoded string,
1048        regardless of these flags, just some more characters will be escaped
1049        using "\uXXXX" then before.
1050
1051        Note that ISO-8859-1-*encoded* strings are not compatible with UTF-8
1052        encoding, while ASCII-encoded strings are. That is because the
1053        ISO-8859-1 encoding is NOT a subset of UTF-8 (despite the ISO-8859-1
1054        *codeset* being a subset of Unicode), while ASCII is.
1055
1056        Surprisingly, "decode" will ignore these flags and so treat all
1057        input values as governed by the "utf8" flag. If it is disabled, this
1058        allows you to decode ISO-8859-1- and ASCII-encoded strings, as both
1059        strict subsets of Unicode. If it is enabled, you can correctly
1060        decode UTF-8 encoded strings.
1061
1062        So neither "latin1" nor "ascii" are incompatible with the "utf8"
1063        flag - they only govern when the JSON output engine escapes a
1064        character or not.
1065
1066        The main use for "latin1" is to relatively efficiently store binary
1067        data as JSON, at the expense of breaking compatibility with most
1068        JSON decoders.
1069
1070        The main use for "ascii" is to force the output to not contain
1071        characters with values > 127, which means you can interpret the
1072        resulting string as UTF-8, ISO-8859-1, ASCII, KOI8-R or most about
1073        any character set and 8-bit-encoding, and still get the same data
1074        structure back. This is useful when your channel for JSON transfer
1075        is not 8-bit clean or the encoding might be mangled in between (e.g.
1076        in mail), and works because ASCII is a proper subset of most 8-bit
1077        and multibyte encodings in use in the world.
1078
1079  JSON and ECMAscript
1080    JSON syntax is based on how literals are represented in javascript (the
1081    not-standardised predecessor of ECMAscript) which is presumably why it
1082    is called "JavaScript Object Notation".
1083
1084    However, JSON is not a subset (and also not a superset of course) of
1085    ECMAscript (the standard) or javascript (whatever browsers actually
1086    implement).
1087
1088    If you want to use javascript's "eval" function to "parse" JSON, you
1089    might run into parse errors for valid JSON texts, or the resulting data
1090    structure might not be queryable:
1091
1092    One of the problems is that U+2028 and U+2029 are valid characters
1093    inside JSON strings, but are not allowed in ECMAscript string literals,
1094    so the following Perl fragment will not output something that can be
1095    guaranteed to be parsable by javascript's "eval":
1096
1097       use JSON::XS;
1098
1099       print encode_json [chr 0x2028];
1100
1101    The right fix for this is to use a proper JSON parser in your javascript
1102    programs, and not rely on "eval" (see for example Douglas Crockford's
1103    json2.js parser).
1104
1105    If this is not an option, you can, as a stop-gap measure, simply encode
1106    to ASCII-only JSON:
1107
1108       use JSON::XS;
1109
1110       print JSON::XS->new->ascii->encode ([chr 0x2028]);
1111
1112    Note that this will enlarge the resulting JSON text quite a bit if you
1113    have many non-ASCII characters. You might be tempted to run some regexes
1114    to only escape U+2028 and U+2029, e.g.:
1115
1116       # DO NOT USE THIS!
1117       my $json = JSON::XS->new->utf8->encode ([chr 0x2028]);
1118       $json =~ s/\xe2\x80\xa8/\\u2028/g; # escape U+2028
1119       $json =~ s/\xe2\x80\xa9/\\u2029/g; # escape U+2029
1120       print $json;
1121
1122    Note that *this is a bad idea*: the above only works for U+2028 and
1123    U+2029 and thus only for fully ECMAscript-compliant parsers. Many
1124    existing javascript implementations, however, have issues with other
1125    characters as well - using "eval" naively simply *will* cause problems.
1126
1127    Another problem is that some javascript implementations reserve some
1128    property names for their own purposes (which probably makes them
1129    non-ECMAscript-compliant). For example, Iceweasel reserves the
1130    "__proto__" property name for it's own purposes.
1131
1132    If that is a problem, you could parse try to filter the resulting JSON
1133    output for these property strings, e.g.:
1134
1135       $json =~ s/"__proto__"\s*:/"__proto__renamed":/g;
1136
1137    This works because "__proto__" is not valid outside of strings, so every
1138    occurence of ""__proto__"\s*:" must be a string used as property name.
1139
1140    If you know of other incompatibilities, please let me know.
1141
1142  JSON and YAML
1143    You often hear that JSON is a subset of YAML. This is, however, a mass
1144    hysteria(*) and very far from the truth (as of the time of this
1145    writing), so let me state it clearly: *in general, there is no way to
1146    configure JSON::XS to output a data structure as valid YAML* that works
1147    in all cases.
1148
1149    If you really must use JSON::XS to generate YAML, you should use this
1150    algorithm (subject to change in future versions):
1151
1152       my $to_yaml = JSON::XS->new->utf8->space_after (1);
1153       my $yaml = $to_yaml->encode ($ref) . "\n";
1154
1155    This will *usually* generate JSON texts that also parse as valid YAML.
1156    Please note that YAML has hardcoded limits on (simple) object key
1157    lengths that JSON doesn't have and also has different and incompatible
1158    unicode character escape syntax, so you should make sure that your hash
1159    keys are noticeably shorter than the 1024 "stream characters" YAML
1160    allows and that you do not have characters with codepoint values outside
1161    the Unicode BMP (basic multilingual page). YAML also does not allow "\/"
1162    sequences in strings (which JSON::XS does not *currently* generate, but
1163    other JSON generators might).
1164
1165    There might be other incompatibilities that I am not aware of (or the
1166    YAML specification has been changed yet again - it does so quite often).
1167    In general you should not try to generate YAML with a JSON generator or
1168    vice versa, or try to parse JSON with a YAML parser or vice versa:
1169    chances are high that you will run into severe interoperability problems
1170    when you least expect it.
1171
1172    (*) I have been pressured multiple times by Brian Ingerson (one of the
1173        authors of the YAML specification) to remove this paragraph, despite
1174        him acknowledging that the actual incompatibilities exist. As I was
1175        personally bitten by this "JSON is YAML" lie, I refused and said I
1176        will continue to educate people about these issues, so others do not
1177        run into the same problem again and again. After this, Brian called
1178        me a (quote)*complete and worthless idiot*(unquote).
1179
1180        In my opinion, instead of pressuring and insulting people who
1181        actually clarify issues with YAML and the wrong statements of some
1182        of its proponents, I would kindly suggest reading the JSON spec
1183        (which is not that difficult or long) and finally make YAML
1184        compatible to it, and educating users about the changes, instead of
1185        spreading lies about the real compatibility for many *years* and
1186        trying to silence people who point out that it isn't true.
1187
1188        Addendum/2009: the YAML 1.2 spec is still incomaptible with JSON,
1189        even though the incompatibilities have been documented (and are
1190        known to Brian) for many years and the spec makes explicit claims
1191        that YAML is a superset of JSON. It would be so easy to fix, but
1192        apparently, bullying and corrupting userdata is so much easier.
1193
1194  SPEED
1195    It seems that JSON::XS is surprisingly fast, as shown in the following
1196    tables. They have been generated with the help of the "eg/bench" program
1197    in the JSON::XS distribution, to make it easy to compare on your own
1198    system.
1199
1200    First comes a comparison between various modules using a very short
1201    single-line JSON string (also available at
1202    <http://dist.schmorp.de/misc/json/short.json>).
1203
1204       {"method": "handleMessage", "params": ["user1",
1205       "we were just talking"], "id": null, "array":[1,11,234,-5,1e5,1e7,
1206       true,  false]}
1207
1208    It shows the number of encodes/decodes per second (JSON::XS uses the
1209    functional interface, while JSON::XS/2 uses the OO interface with
1210    pretty-printing and hashkey sorting enabled, JSON::XS/3 enables shrink).
1211    Higher is better:
1212
1213       module     |     encode |     decode |
1214       -----------|------------|------------|
1215       JSON 1.x   |   4990.842 |   4088.813 |
1216       JSON::DWIW |  51653.990 |  71575.154 |
1217       JSON::PC   |  65948.176 |  74631.744 |
1218       JSON::PP   |   8931.652 |   3817.168 |
1219       JSON::Syck |  24877.248 |  27776.848 |
1220       JSON::XS   | 388361.481 | 227951.304 |
1221       JSON::XS/2 | 227951.304 | 218453.333 |
1222       JSON::XS/3 | 338250.323 | 218453.333 |
1223       Storable   |  16500.016 | 135300.129 |
1224       -----------+------------+------------+
1225
1226    That is, JSON::XS is about five times faster than JSON::DWIW on
1227    encoding, about three times faster on decoding, and over forty times
1228    faster than JSON, even with pretty-printing and key sorting. It also
1229    compares favourably to Storable for small amounts of data.
1230
1231    Using a longer test string (roughly 18KB, generated from Yahoo! Locals
1232    search API (<http://dist.schmorp.de/misc/json/long.json>).
1233
1234       module     |     encode |     decode |
1235       -----------|------------|------------|
1236       JSON 1.x   |     55.260 |     34.971 |
1237       JSON::DWIW |    825.228 |   1082.513 |
1238       JSON::PC   |   3571.444 |   2394.829 |
1239       JSON::PP   |    210.987 |     32.574 |
1240       JSON::Syck |    552.551 |    787.544 |
1241       JSON::XS   |   5780.463 |   4854.519 |
1242       JSON::XS/2 |   3869.998 |   4798.975 |
1243       JSON::XS/3 |   5862.880 |   4798.975 |
1244       Storable   |   4445.002 |   5235.027 |
1245       -----------+------------+------------+
1246
1247    Again, JSON::XS leads by far (except for Storable which non-surprisingly
1248    decodes faster).
1249
1250    On large strings containing lots of high Unicode characters, some
1251    modules (such as JSON::PC) seem to decode faster than JSON::XS, but the
1252    result will be broken due to missing (or wrong) Unicode handling. Others
1253    refuse to decode or encode properly, so it was impossible to prepare a
1254    fair comparison table for that case.
1255
1256SECURITY CONSIDERATIONS
1257    When you are using JSON in a protocol, talking to untrusted potentially
1258    hostile creatures requires relatively few measures.
1259
1260    First of all, your JSON decoder should be secure, that is, should not
1261    have any buffer overflows. Obviously, this module should ensure that and
1262    I am trying hard on making that true, but you never know.
1263
1264    Second, you need to avoid resource-starving attacks. That means you
1265    should limit the size of JSON texts you accept, or make sure then when
1266    your resources run out, that's just fine (e.g. by using a separate
1267    process that can crash safely). The size of a JSON text in octets or
1268    characters is usually a good indication of the size of the resources
1269    required to decode it into a Perl structure. While JSON::XS can check
1270    the size of the JSON text, it might be too late when you already have it
1271    in memory, so you might want to check the size before you accept the
1272    string.
1273
1274    Third, JSON::XS recurses using the C stack when decoding objects and
1275    arrays. The C stack is a limited resource: for instance, on my amd64
1276    machine with 8MB of stack size I can decode around 180k nested arrays
1277    but only 14k nested JSON objects (due to perl itself recursing deeply on
1278    croak to free the temporary). If that is exceeded, the program crashes.
1279    To be conservative, the default nesting limit is set to 512. If your
1280    process has a smaller stack, you should adjust this setting accordingly
1281    with the "max_depth" method.
1282
1283    Something else could bomb you, too, that I forgot to think of. In that
1284    case, you get to keep the pieces. I am always open for hints, though...
1285
1286    Also keep in mind that JSON::XS might leak contents of your Perl data
1287    structures in its error messages, so when you serialise sensitive
1288    information you might want to make sure that exceptions thrown by
1289    JSON::XS will not end up in front of untrusted eyes.
1290
1291    If you are using JSON::XS to return packets to consumption by JavaScript
1292    scripts in a browser you should have a look at
1293    <http://jpsykes.com/47/practical-csrf-and-json-security> to see whether
1294    you are vulnerable to some common attack vectors (which really are
1295    browser design bugs, but it is still you who will have to deal with it,
1296    as major browser developers care only for features, not about getting
1297    security right).
1298
1299THREADS
1300    This module is *not* guaranteed to be thread safe and there are no plans
1301    to change this until Perl gets thread support (as opposed to the
1302    horribly slow so-called "threads" which are simply slow and bloated
1303    process simulations - use fork, it's *much* faster, cheaper, better).
1304
1305    (It might actually work, but you have been warned).
1306
1307BUGS
1308    While the goal of this module is to be correct, that unfortunately does
1309    not mean it's bug-free, only that I think its design is bug-free. If you
1310    keep reporting bugs they will be fixed swiftly, though.
1311
1312    Please refrain from using rt.cpan.org or any other bug reporting
1313    service. I put the contact address into my modules for a reason.
1314
1315SEE ALSO
1316    The json_xs command line utility for quick experiments.
1317
1318AUTHOR
1319     Marc Lehmann <schmorp@schmorp.de>
1320     http://home.schmorp.de/
1321
1322