ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/EV/README
Revision: 1.1
Committed: Fri Oct 26 09:19:48 2007 UTC (16 years, 6 months ago) by root
Branch: MAIN
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 NAME
2     JSON::XS - JSON serialising/deserialising, done correctly and fast
3    
4     JSON::XS - 正しくて高速な JSON
5     シリアライザ/デシリアライザ
6     (http://fleur.hio.jp/perldoc/mix/lib/JSON/XS.html)
7    
8     SYNOPSIS
9     use JSON::XS;
10    
11     # exported functions, they croak on error
12     # and expect/generate UTF-8
13    
14     $utf8_encoded_json_text = to_json $perl_hash_or_arrayref;
15     $perl_hash_or_arrayref = from_json $utf8_encoded_json_text;
16    
17     # OO-interface
18    
19     $coder = JSON::XS->new->ascii->pretty->allow_nonref;
20     $pretty_printed_unencoded = $coder->encode ($perl_scalar);
21     $perl_scalar = $coder->decode ($unicode_json_text);
22    
23     DESCRIPTION
24     This module converts Perl data structures to JSON and vice versa. Its
25     primary goal is to be *correct* and its secondary goal is to be *fast*.
26     To reach the latter goal it was written in C.
27    
28     As this is the n-th-something JSON module on CPAN, what was the reason
29     to write yet another JSON module? While it seems there are many JSON
30     modules, none of them correctly handle all corner cases, and in most
31     cases their maintainers are unresponsive, gone missing, or not listening
32     to bug reports for other reasons.
33    
34     See COMPARISON, below, for a comparison to some other JSON modules.
35    
36     See MAPPING, below, on how JSON::XS maps perl values to JSON values and
37     vice versa.
38    
39     FEATURES
40     * correct unicode handling
41     This module knows how to handle Unicode, and even documents how and
42     when it does so.
43    
44     * round-trip integrity
45     When you serialise a perl data structure using only datatypes
46     supported by JSON, the deserialised data structure is identical on
47     the Perl level. (e.g. the string "2.0" doesn't suddenly become "2"
48     just because it looks like a number).
49    
50     * strict checking of JSON correctness
51     There is no guessing, no generating of illegal JSON texts by
52     default, and only JSON is accepted as input by default (the latter
53     is a security feature).
54    
55     * fast
56     Compared to other JSON modules, this module compares favourably in
57     terms of speed, too.
58    
59     * simple to use
60     This module has both a simple functional interface as well as an OO
61     interface.
62    
63     * reasonably versatile output formats
64     You can choose between the most compact guarenteed single-line
65     format possible (nice for simple line-based protocols), a pure-ascii
66     format (for when your transport is not 8-bit clean, still supports
67     the whole unicode range), or a pretty-printed format (for when you
68     want to read that stuff). Or you can combine those features in
69     whatever way you like.
70    
71     FUNCTIONAL INTERFACE
72     The following convinience methods are provided by this module. They are
73     exported by default:
74    
75     $json_text = to_json $perl_scalar
76     Converts the given Perl data structure to a UTF-8 encoded, binary
77     string (that is, the string contains octets only). Croaks on error.
78    
79     This function call is functionally identical to:
80    
81     $json_text = JSON::XS->new->utf8->encode ($perl_scalar)
82    
83     except being faster.
84    
85     $perl_scalar = from_json $json_text
86     The opposite of "to_json": expects an UTF-8 (binary) string and
87     tries to parse that as an UTF-8 encoded JSON text, returning the
88     resulting reference. Croaks on error.
89    
90     This function call is functionally identical to:
91    
92     $perl_scalar = JSON::XS->new->utf8->decode ($json_text)
93    
94     except being faster.
95    
96     $is_boolean = JSON::XS::is_bool $scalar
97     Returns true if the passed scalar represents either JSON::XS::true
98     or JSON::XS::false, two constants that act like 1 and 0,
99     respectively and are used to represent JSON "true" and "false"
100     values in Perl.
101    
102     See MAPPING, below, for more information on how JSON values are
103     mapped to Perl.
104    
105     A FEW NOTES ON UNICODE AND PERL
106     Since this often leads to confusion, here are a few very clear words on
107     how Unicode works in Perl, modulo bugs.
108    
109     1. Perl strings can store characters with ordinal values > 255.
110     This enables you to store unicode characters as single characters in
111     a Perl string - very natural.
112    
113     2. Perl does *not* associate an encoding with your strings.
114     Unless you force it to, e.g. when matching it against a regex, or
115     printing the scalar to a file, in which case Perl either interprets
116     your string as locale-encoded text, octets/binary, or as Unicode,
117     depending on various settings. In no case is an encoding stored
118     together with your data, it is *use* that decides encoding, not any
119     magical metadata.
120    
121     3. The internal utf-8 flag has no meaning with regards to the encoding
122     of your string.
123     Just ignore that flag unless you debug a Perl bug, a module written
124     in XS or want to dive into the internals of perl. Otherwise it will
125     only confuse you, as, despite the name, it says nothing about how
126     your string is encoded. You can have unicode strings with that flag
127     set, with that flag clear, and you can have binary data with that
128     flag set and that flag clear. Other possibilities exist, too.
129    
130     If you didn't know about that flag, just the better, pretend it
131     doesn't exist.
132    
133     4. A "Unicode String" is simply a string where each character can be
134     validly interpreted as a Unicode codepoint.
135     If you have UTF-8 encoded data, it is no longer a Unicode string,
136     but a Unicode string encoded in UTF-8, giving you a binary string.
137    
138     5. A string containing "high" (> 255) character values is *not* a UTF-8
139     string.
140     Its a fact. Learn to live with it.
141    
142     I hope this helps :)
143    
144     OBJECT-ORIENTED INTERFACE
145     The object oriented interface lets you configure your own encoding or
146     decoding style, within the limits of supported formats.
147    
148     $json = new JSON::XS
149     Creates a new JSON::XS object that can be used to de/encode JSON
150     strings. All boolean flags described below are by default
151     *disabled*.
152    
153     The mutators for flags all return the JSON object again and thus
154     calls can be chained:
155    
156     my $json = JSON::XS->new->utf8->space_after->encode ({a => [1,2]})
157     => {"a": [1, 2]}
158    
159     $json = $json->ascii ([$enable])
160     If $enable is true (or missing), then the "encode" method will not
161     generate characters outside the code range 0..127 (which is ASCII).
162     Any unicode characters outside that range will be escaped using
163     either a single \uXXXX (BMP characters) or a double \uHHHH\uLLLLL
164     escape sequence, as per RFC4627. The resulting encoded JSON text can
165     be treated as a native unicode string, an ascii-encoded,
166     latin1-encoded or UTF-8 encoded string, or any other superset of
167     ASCII.
168    
169     If $enable is false, then the "encode" method will not escape
170     Unicode characters unless required by the JSON syntax or other
171     flags. This results in a faster and more compact format.
172    
173     The main use for this flag is to produce JSON texts that can be
174     transmitted over a 7-bit channel, as the encoded JSON texts will not
175     contain any 8 bit characters.
176    
177     JSON::XS->new->ascii (1)->encode ([chr 0x10401])
178     => ["\ud801\udc01"]
179    
180     $json = $json->latin1 ([$enable])
181     If $enable is true (or missing), then the "encode" method will
182     encode the resulting JSON text as latin1 (or iso-8859-1), escaping
183     any characters outside the code range 0..255. The resulting string
184     can be treated as a latin1-encoded JSON text or a native unicode
185     string. The "decode" method will not be affected in any way by this
186     flag, as "decode" by default expects unicode, which is a strict
187     superset of latin1.
188    
189     If $enable is false, then the "encode" method will not escape
190     Unicode characters unless required by the JSON syntax or other
191     flags.
192    
193     The main use for this flag is efficiently encoding binary data as
194     JSON text, as most octets will not be escaped, resulting in a
195     smaller encoded size. The disadvantage is that the resulting JSON
196     text is encoded in latin1 (and must correctly be treated as such
197     when storing and transfering), a rare encoding for JSON. It is
198     therefore most useful when you want to store data structures known
199     to contain binary data efficiently in files or databases, not when
200     talking to other JSON encoders/decoders.
201    
202     JSON::XS->new->latin1->encode (["\x{89}\x{abc}"]
203     => ["\x{89}\\u0abc"] # (perl syntax, U+abc escaped, U+89 not)
204    
205     $json = $json->utf8 ([$enable])
206     If $enable is true (or missing), then the "encode" method will
207     encode the JSON result into UTF-8, as required by many protocols,
208     while the "decode" method expects to be handled an UTF-8-encoded
209     string. Please note that UTF-8-encoded strings do not contain any
210     characters outside the range 0..255, they are thus useful for
211     bytewise/binary I/O. In future versions, enabling this option might
212     enable autodetection of the UTF-16 and UTF-32 encoding families, as
213     described in RFC4627.
214    
215     If $enable is false, then the "encode" method will return the JSON
216     string as a (non-encoded) unicode string, while "decode" expects
217     thus a unicode string. Any decoding or encoding (e.g. to UTF-8 or
218     UTF-16) needs to be done yourself, e.g. using the Encode module.
219    
220     Example, output UTF-16BE-encoded JSON:
221    
222     use Encode;
223     $jsontext = encode "UTF-16BE", JSON::XS->new->encode ($object);
224    
225     Example, decode UTF-32LE-encoded JSON:
226    
227     use Encode;
228     $object = JSON::XS->new->decode (decode "UTF-32LE", $jsontext);
229    
230     $json = $json->pretty ([$enable])
231     This enables (or disables) all of the "indent", "space_before" and
232     "space_after" (and in the future possibly more) flags in one call to
233     generate the most readable (or most compact) form possible.
234    
235     Example, pretty-print some simple structure:
236    
237     my $json = JSON::XS->new->pretty(1)->encode ({a => [1,2]})
238     =>
239     {
240     "a" : [
241     1,
242     2
243     ]
244     }
245    
246     $json = $json->indent ([$enable])
247     If $enable is true (or missing), then the "encode" method will use a
248     multiline format as output, putting every array member or
249     object/hash key-value pair into its own line, identing them
250     properly.
251    
252     If $enable is false, no newlines or indenting will be produced, and
253     the resulting JSON text is guarenteed not to contain any "newlines".
254    
255     This setting has no effect when decoding JSON texts.
256    
257     $json = $json->space_before ([$enable])
258     If $enable is true (or missing), then the "encode" method will add
259     an extra optional space before the ":" separating keys from values
260     in JSON objects.
261    
262     If $enable is false, then the "encode" method will not add any extra
263     space at those places.
264    
265     This setting has no effect when decoding JSON texts. You will also
266     most likely combine this setting with "space_after".
267    
268     Example, space_before enabled, space_after and indent disabled:
269    
270     {"key" :"value"}
271    
272     $json = $json->space_after ([$enable])
273     If $enable is true (or missing), then the "encode" method will add
274     an extra optional space after the ":" separating keys from values in
275     JSON objects and extra whitespace after the "," separating key-value
276     pairs and array members.
277    
278     If $enable is false, then the "encode" method will not add any extra
279     space at those places.
280    
281     This setting has no effect when decoding JSON texts.
282    
283     Example, space_before and indent disabled, space_after enabled:
284    
285     {"key": "value"}
286    
287     $json = $json->relaxed ([$enable])
288     If $enable is true (or missing), then "decode" will accept some
289     extensions to normal JSON syntax (see below). "encode" will not be
290     affected in anyway. *Be aware that this option makes you accept
291     invalid JSON texts as if they were valid!*. I suggest only to use
292     this option to parse application-specific files written by humans
293     (configuration files, resource files etc.)
294    
295     If $enable is false (the default), then "decode" will only accept
296     valid JSON texts.
297    
298     Currently accepted extensions are:
299    
300     * list items can have an end-comma
301     JSON *separates* array elements and key-value pairs with commas.
302     This can be annoying if you write JSON texts manually and want
303     to be able to quickly append elements, so this extension accepts
304     comma at the end of such items not just between them:
305    
306     [
307     1,
308     2, <- this comma not normally allowed
309     ]
310     {
311     "k1": "v1",
312     "k2": "v2", <- this comma not normally allowed
313     }
314    
315     * shell-style '#'-comments
316     Whenever JSON allows whitespace, shell-style comments are
317     additionally allowed. They are terminated by the first
318     carriage-return or line-feed character, after which more
319     white-space and comments are allowed.
320    
321     [
322     1, # this comment not allowed in JSON
323     # neither this one...
324     ]
325    
326     $json = $json->canonical ([$enable])
327     If $enable is true (or missing), then the "encode" method will
328     output JSON objects by sorting their keys. This is adding a
329     comparatively high overhead.
330    
331     If $enable is false, then the "encode" method will output key-value
332     pairs in the order Perl stores them (which will likely change
333     between runs of the same script).
334    
335     This option is useful if you want the same data structure to be
336     encoded as the same JSON text (given the same overall settings). If
337     it is disabled, the same hash migh be encoded differently even if
338     contains the same data, as key-value pairs have no inherent ordering
339     in Perl.
340    
341     This setting has no effect when decoding JSON texts.
342    
343     $json = $json->allow_nonref ([$enable])
344     If $enable is true (or missing), then the "encode" method can
345     convert a non-reference into its corresponding string, number or
346     null JSON value, which is an extension to RFC4627. Likewise,
347     "decode" will accept those JSON values instead of croaking.
348    
349     If $enable is false, then the "encode" method will croak if it isn't
350     passed an arrayref or hashref, as JSON texts must either be an
351     object or array. Likewise, "decode" will croak if given something
352     that is not a JSON object or array.
353    
354     Example, encode a Perl scalar as JSON value with enabled
355     "allow_nonref", resulting in an invalid JSON text:
356    
357     JSON::XS->new->allow_nonref->encode ("Hello, World!")
358     => "Hello, World!"
359    
360     $json = $json->allow_blessed ([$enable])
361     If $enable is true (or missing), then the "encode" method will not
362     barf when it encounters a blessed reference. Instead, the value of
363     the convert_blessed option will decide wether "null"
364     ("convert_blessed" disabled or no "to_json" method found) or a
365     representation of the object ("convert_blessed" enabled and
366     "to_json" method found) is being encoded. Has no effect on "decode".
367    
368     If $enable is false (the default), then "encode" will throw an
369     exception when it encounters a blessed object.
370    
371     $json = $json->convert_blessed ([$enable])
372     If $enable is true (or missing), then "encode", upon encountering a
373     blessed object, will check for the availability of the "TO_JSON"
374     method on the object's class. If found, it will be called in scalar
375     context and the resulting scalar will be encoded instead of the
376     object. If no "TO_JSON" method is found, the value of
377     "allow_blessed" will decide what to do.
378    
379     The "TO_JSON" method may safely call die if it wants. If "TO_JSON"
380     returns other blessed objects, those will be handled in the same
381     way. "TO_JSON" must take care of not causing an endless recursion
382     cycle (== crash) in this case. The name of "TO_JSON" was chosen
383     because other methods called by the Perl core (== not by the user of
384     the object) are usually in upper case letters and to avoid
385     collisions with the "to_json" function.
386    
387     This setting does not yet influence "decode" in any way, but in the
388     future, global hooks might get installed that influence "decode" and
389     are enabled by this setting.
390    
391     If $enable is false, then the "allow_blessed" setting will decide
392     what to do when a blessed object is found.
393    
394     $json = $json->filter_json_object ([$coderef->($hashref)])
395     When $coderef is specified, it will be called from "decode" each
396     time it decodes a JSON object. The only argument is a reference to
397     the newly-created hash. If the code references returns a single
398     scalar (which need not be a reference), this value (i.e. a copy of
399     that scalar to avoid aliasing) is inserted into the deserialised
400     data structure. If it returns an empty list (NOTE: *not* "undef",
401     which is a valid scalar), the original deserialised hash will be
402     inserted. This setting can slow down decoding considerably.
403    
404     When $coderef is omitted or undefined, any existing callback will be
405     removed and "decode" will not change the deserialised hash in any
406     way.
407    
408     Example, convert all JSON objects into the integer 5:
409    
410     my $js = JSON::XS->new->filter_json_object (sub { 5 });
411     # returns [5]
412     $js->decode ('[{}]')
413     # throw an exception because allow_nonref is not enabled
414     # so a lone 5 is not allowed.
415     $js->decode ('{"a":1, "b":2}');
416    
417     $json = $json->filter_json_single_key_object ($key [=>
418     $coderef->($value)])
419     Works remotely similar to "filter_json_object", but is only called
420     for JSON objects having a single key named $key.
421    
422     This $coderef is called before the one specified via
423     "filter_json_object", if any. It gets passed the single value in the
424     JSON object. If it returns a single value, it will be inserted into
425     the data structure. If it returns nothing (not even "undef" but the
426     empty list), the callback from "filter_json_object" will be called
427     next, as if no single-key callback were specified.
428    
429     If $coderef is omitted or undefined, the corresponding callback will
430     be disabled. There can only ever be one callback for a given key.
431    
432     As this callback gets called less often then the
433     "filter_json_object" one, decoding speed will not usually suffer as
434     much. Therefore, single-key objects make excellent targets to
435     serialise Perl objects into, especially as single-key JSON objects
436     are as close to the type-tagged value concept as JSON gets (its
437     basically an ID/VALUE tuple). Of course, JSON does not support this
438     in any way, so you need to make sure your data never looks like a
439     serialised Perl hash.
440    
441     Typical names for the single object key are "__class_whatever__", or
442     "$__dollars_are_rarely_used__$" or "}ugly_brace_placement", or even
443     things like "__class_md5sum(classname)__", to reduce the risk of
444     clashing with real hashes.
445    
446     Example, decode JSON objects of the form "{ "__widget__" => <id> }"
447     into the corresponding $WIDGET{<id>} object:
448    
449     # return whatever is in $WIDGET{5}:
450     JSON::XS
451     ->new
452     ->filter_json_single_key_object (__widget__ => sub {
453     $WIDGET{ $_[0] }
454     })
455     ->decode ('{"__widget__": 5')
456    
457     # this can be used with a TO_JSON method in some "widget" class
458     # for serialisation to json:
459     sub WidgetBase::TO_JSON {
460     my ($self) = @_;
461    
462     unless ($self->{id}) {
463     $self->{id} = ..get..some..id..;
464     $WIDGET{$self->{id}} = $self;
465     }
466    
467     { __widget__ => $self->{id} }
468     }
469    
470     $json = $json->shrink ([$enable])
471     Perl usually over-allocates memory a bit when allocating space for
472     strings. This flag optionally resizes strings generated by either
473     "encode" or "decode" to their minimum size possible. This can save
474     memory when your JSON texts are either very very long or you have
475     many short strings. It will also try to downgrade any strings to
476     octet-form if possible: perl stores strings internally either in an
477     encoding called UTF-X or in octet-form. The latter cannot store
478     everything but uses less space in general (and some buggy Perl or C
479     code might even rely on that internal representation being used).
480    
481     The actual definition of what shrink does might change in future
482     versions, but it will always try to save space at the expense of
483     time.
484    
485     If $enable is true (or missing), the string returned by "encode"
486     will be shrunk-to-fit, while all strings generated by "decode" will
487     also be shrunk-to-fit.
488    
489     If $enable is false, then the normal perl allocation algorithms are
490     used. If you work with your data, then this is likely to be faster.
491    
492     In the future, this setting might control other things, such as
493     converting strings that look like integers or floats into integers
494     or floats internally (there is no difference on the Perl level),
495     saving space.
496    
497     $json = $json->max_depth ([$maximum_nesting_depth])
498     Sets the maximum nesting level (default 512) accepted while encoding
499     or decoding. If the JSON text or Perl data structure has an equal or
500     higher nesting level then this limit, then the encoder and decoder
501     will stop and croak at that point.
502    
503     Nesting level is defined by number of hash- or arrayrefs that the
504     encoder needs to traverse to reach a given point or the number of
505     "{" or "[" characters without their matching closing parenthesis
506     crossed to reach a given character in a string.
507    
508     Setting the maximum depth to one disallows any nesting, so that
509     ensures that the object is only a single hash/object or array.
510    
511     The argument to "max_depth" will be rounded up to the next highest
512     power of two. If no argument is given, the highest possible setting
513     will be used, which is rarely useful.
514    
515     See SECURITY CONSIDERATIONS, below, for more info on why this is
516     useful.
517    
518     $json = $json->max_size ([$maximum_string_size])
519     Set the maximum length a JSON text may have (in bytes) where
520     decoding is being attempted. The default is 0, meaning no limit.
521     When "decode" is called on a string longer then this number of
522     characters it will not attempt to decode the string but throw an
523     exception. This setting has no effect on "encode" (yet).
524    
525     The argument to "max_size" will be rounded up to the next highest
526     power of two (so may be more than requested). If no argument is
527     given, the limit check will be deactivated (same as when 0 is
528     specified).
529    
530     See SECURITY CONSIDERATIONS, below, for more info on why this is
531     useful.
532    
533     $json_text = $json->encode ($perl_scalar)
534     Converts the given Perl data structure (a simple scalar or a
535     reference to a hash or array) to its JSON representation. Simple
536     scalars will be converted into JSON string or number sequences,
537     while references to arrays become JSON arrays and references to
538     hashes become JSON objects. Undefined Perl values (e.g. "undef")
539     become JSON "null" values. Neither "true" nor "false" values will be
540     generated.
541    
542     $perl_scalar = $json->decode ($json_text)
543     The opposite of "encode": expects a JSON text and tries to parse it,
544     returning the resulting simple scalar or reference. Croaks on error.
545    
546     JSON numbers and strings become simple Perl scalars. JSON arrays
547     become Perl arrayrefs and JSON objects become Perl hashrefs. "true"
548     becomes 1, "false" becomes 0 and "null" becomes "undef".
549    
550     ($perl_scalar, $characters) = $json->decode_prefix ($json_text)
551     This works like the "decode" method, but instead of raising an
552     exception when there is trailing garbage after the first JSON
553     object, it will silently stop parsing there and return the number of
554     characters consumed so far.
555    
556     This is useful if your JSON texts are not delimited by an outer
557     protocol (which is not the brightest thing to do in the first place)
558     and you need to know where the JSON text ends.
559    
560     JSON::XS->new->decode_prefix ("[1] the tail")
561     => ([], 3)
562    
563     MAPPING
564     This section describes how JSON::XS maps Perl values to JSON values and
565     vice versa. These mappings are designed to "do the right thing" in most
566     circumstances automatically, preserving round-tripping characteristics
567     (what you put in comes out as something equivalent).
568    
569     For the more enlightened: note that in the following descriptions,
570     lowercase *perl* refers to the Perl interpreter, while uppcercase *Perl*
571     refers to the abstract Perl language itself.
572    
573     JSON -> PERL
574     object
575     A JSON object becomes a reference to a hash in Perl. No ordering of
576     object keys is preserved (JSON does not preserver object key
577     ordering itself).
578    
579     array
580     A JSON array becomes a reference to an array in Perl.
581    
582     string
583     A JSON string becomes a string scalar in Perl - Unicode codepoints
584     in JSON are represented by the same codepoints in the Perl string,
585     so no manual decoding is necessary.
586    
587     number
588     A JSON number becomes either an integer, numeric (floating point) or
589     string scalar in perl, depending on its range and any fractional
590     parts. On the Perl level, there is no difference between those as
591     Perl handles all the conversion details, but an integer may take
592     slightly less memory and might represent more values exactly than
593     (floating point) numbers.
594    
595     If the number consists of digits only, JSON::XS will try to
596     represent it as an integer value. If that fails, it will try to
597     represent it as a numeric (floating point) value if that is possible
598     without loss of precision. Otherwise it will preserve the number as
599     a string value.
600    
601     Numbers containing a fractional or exponential part will always be
602     represented as numeric (floating point) values, possibly at a loss
603     of precision.
604    
605     This might create round-tripping problems as numbers might become
606     strings, but as Perl is typeless there is no other way to do it.
607    
608     true, false
609     These JSON atoms become "JSON::XS::true" and "JSON::XS::false",
610     respectively. They are overloaded to act almost exactly like the
611     numbers 1 and 0. You can check wether a scalar is a JSON boolean by
612     using the "JSON::XS::is_bool" function.
613    
614     null
615     A JSON null atom becomes "undef" in Perl.
616    
617     PERL -> JSON
618     The mapping from Perl to JSON is slightly more difficult, as Perl is a
619     truly typeless language, so we can only guess which JSON type is meant
620     by a Perl value.
621    
622     hash references
623     Perl hash references become JSON objects. As there is no inherent
624     ordering in hash keys (or JSON objects), they will usually be
625     encoded in a pseudo-random order that can change between runs of the
626     same program but stays generally the same within a single run of a
627     program. JSON::XS can optionally sort the hash keys (determined by
628     the *canonical* flag), so the same datastructure will serialise to
629     the same JSON text (given same settings and version of JSON::XS),
630     but this incurs a runtime overhead and is only rarely useful, e.g.
631     when you want to compare some JSON text against another for
632     equality.
633    
634     array references
635     Perl array references become JSON arrays.
636    
637     other references
638     Other unblessed references are generally not allowed and will cause
639     an exception to be thrown, except for references to the integers 0
640     and 1, which get turned into "false" and "true" atoms in JSON. You
641     can also use "JSON::XS::false" and "JSON::XS::true" to improve
642     readability.
643    
644     to_json [\0,JSON::XS::true] # yields [false,true]
645    
646     JSON::XS::true, JSON::XS::false
647     These special values become JSON true and JSON false values,
648     respectively. You can also use "\1" and "\0" directly if you want.
649    
650     blessed objects
651     Blessed objects are not allowed. JSON::XS currently tries to encode
652     their underlying representation (hash- or arrayref), but this
653     behaviour might change in future versions.
654    
655     simple scalars
656     Simple Perl scalars (any scalar that is not a reference) are the
657     most difficult objects to encode: JSON::XS will encode undefined
658     scalars as JSON null value, scalars that have last been used in a
659     string context before encoding as JSON strings and anything else as
660     number value:
661    
662     # dump as number
663     to_json [2] # yields [2]
664     to_json [-3.0e17] # yields [-3e+17]
665     my $value = 5; to_json [$value] # yields [5]
666    
667     # used as string, so dump as string
668     print $value;
669     to_json [$value] # yields ["5"]
670    
671     # undef becomes null
672     to_json [undef] # yields [null]
673    
674     You can force the type to be a string by stringifying it:
675    
676     my $x = 3.1; # some variable containing a number
677     "$x"; # stringified
678     $x .= ""; # another, more awkward way to stringify
679     print $x; # perl does it for you, too, quite often
680    
681     You can force the type to be a number by numifying it:
682    
683     my $x = "3"; # some variable containing a string
684     $x += 0; # numify it, ensuring it will be dumped as a number
685     $x *= 1; # same thing, the choise is yours.
686    
687     You can not currently output JSON booleans or force the type in
688     other, less obscure, ways. Tell me if you need this capability.
689    
690     COMPARISON
691     As already mentioned, this module was created because none of the
692     existing JSON modules could be made to work correctly. First I will
693     describe the problems (or pleasures) I encountered with various existing
694     JSON modules, followed by some benchmark values. JSON::XS was designed
695     not to suffer from any of these problems or limitations.
696    
697     JSON 1.07
698     Slow (but very portable, as it is written in pure Perl).
699    
700     Undocumented/buggy Unicode handling (how JSON handles unicode values
701     is undocumented. One can get far by feeding it unicode strings and
702     doing en-/decoding oneself, but unicode escapes are not working
703     properly).
704    
705     No roundtripping (strings get clobbered if they look like numbers,
706     e.g. the string 2.0 will encode to 2.0 instead of "2.0", and that
707     will decode into the number 2.
708    
709     JSON::PC 0.01
710     Very fast.
711    
712     Undocumented/buggy Unicode handling.
713    
714     No roundtripping.
715    
716     Has problems handling many Perl values (e.g. regex results and other
717     magic values will make it croak).
718    
719     Does not even generate valid JSON ("{1,2}" gets converted to "{1:2}"
720     which is not a valid JSON text.
721    
722     Unmaintained (maintainer unresponsive for many months, bugs are not
723     getting fixed).
724    
725     JSON::Syck 0.21
726     Very buggy (often crashes).
727    
728     Very inflexible (no human-readable format supported, format pretty
729     much undocumented. I need at least a format for easy reading by
730     humans and a single-line compact format for use in a protocol, and
731     preferably a way to generate ASCII-only JSON texts).
732    
733     Completely broken (and confusingly documented) Unicode handling
734     (unicode escapes are not working properly, you need to set
735     ImplicitUnicode to *different* values on en- and decoding to get
736     symmetric behaviour).
737    
738     No roundtripping (simple cases work, but this depends on wether the
739     scalar value was used in a numeric context or not).
740    
741     Dumping hashes may skip hash values depending on iterator state.
742    
743     Unmaintained (maintainer unresponsive for many months, bugs are not
744     getting fixed).
745    
746     Does not check input for validity (i.e. will accept non-JSON input
747     and return "something" instead of raising an exception. This is a
748     security issue: imagine two banks transfering money between each
749     other using JSON. One bank might parse a given non-JSON request and
750     deduct money, while the other might reject the transaction with a
751     syntax error. While a good protocol will at least recover, that is
752     extra unnecessary work and the transaction will still not succeed).
753    
754     JSON::DWIW 0.04
755     Very fast. Very natural. Very nice.
756    
757     Undocumented unicode handling (but the best of the pack. Unicode
758     escapes still don't get parsed properly).
759    
760     Very inflexible.
761    
762     No roundtripping.
763    
764     Does not generate valid JSON texts (key strings are often unquoted,
765     empty keys result in nothing being output)
766    
767     Does not check input for validity.
768    
769     JSON and YAML
770     You often hear that JSON is a subset (or a close subset) of YAML. This
771     is, however, a mass hysteria and very far from the truth. In general,
772     there is no way to configure JSON::XS to output a data structure as
773     valid YAML.
774    
775     If you really must use JSON::XS to generate YAML, you should use this
776     algorithm (subject to change in future versions):
777    
778     my $to_yaml = JSON::XS->new->utf8->space_after (1);
779     my $yaml = $to_yaml->encode ($ref) . "\n";
780    
781     This will usually generate JSON texts that also parse as valid YAML.
782     Please note that YAML has hardcoded limits on (simple) object key
783     lengths that JSON doesn't have, so you should make sure that your hash
784     keys are noticably shorter than the 1024 characters YAML allows.
785    
786     There might be other incompatibilities that I am not aware of. In
787     general you should not try to generate YAML with a JSON generator or
788     vice versa, or try to parse JSON with a YAML parser or vice versa:
789     chances are high that you will run into severe interoperability
790     problems.
791    
792     SPEED
793     It seems that JSON::XS is surprisingly fast, as shown in the following
794     tables. They have been generated with the help of the "eg/bench" program
795     in the JSON::XS distribution, to make it easy to compare on your own
796     system.
797    
798     First comes a comparison between various modules using a very short
799     single-line JSON string:
800    
801     {"method": "handleMessage", "params": ["user1", "we were just talking"], \
802     "id": null, "array":[1,11,234,-5,1e5,1e7, true, false]}
803    
804     It shows the number of encodes/decodes per second (JSON::XS uses the
805     functional interface, while JSON::XS/2 uses the OO interface with
806     pretty-printing and hashkey sorting enabled, JSON::XS/3 enables shrink).
807     Higher is better:
808    
809     Storable | 15779.925 | 14169.946 |
810     -----------+------------+------------+
811     module | encode | decode |
812     -----------|------------|------------|
813     JSON | 4990.842 | 4088.813 |
814     JSON::DWIW | 51653.990 | 71575.154 |
815     JSON::PC | 65948.176 | 74631.744 |
816     JSON::PP | 8931.652 | 3817.168 |
817     JSON::Syck | 24877.248 | 27776.848 |
818     JSON::XS | 388361.481 | 227951.304 |
819     JSON::XS/2 | 227951.304 | 218453.333 |
820     JSON::XS/3 | 338250.323 | 218453.333 |
821     Storable | 16500.016 | 135300.129 |
822     -----------+------------+------------+
823    
824     That is, JSON::XS is about five times faster than JSON::DWIW on
825     encoding, about three times faster on decoding, and over fourty times
826     faster than JSON, even with pretty-printing and key sorting. It also
827     compares favourably to Storable for small amounts of data.
828    
829     Using a longer test string (roughly 18KB, generated from Yahoo! Locals
830     search API (http://nanoref.com/yahooapis/mgPdGg):
831    
832     module | encode | decode |
833     -----------|------------|------------|
834     JSON | 55.260 | 34.971 |
835     JSON::DWIW | 825.228 | 1082.513 |
836     JSON::PC | 3571.444 | 2394.829 |
837     JSON::PP | 210.987 | 32.574 |
838     JSON::Syck | 552.551 | 787.544 |
839     JSON::XS | 5780.463 | 4854.519 |
840     JSON::XS/2 | 3869.998 | 4798.975 |
841     JSON::XS/3 | 5862.880 | 4798.975 |
842     Storable | 4445.002 | 5235.027 |
843     -----------+------------+------------+
844    
845     Again, JSON::XS leads by far (except for Storable which non-surprisingly
846     decodes faster).
847    
848     On large strings containing lots of high unicode characters, some
849     modules (such as JSON::PC) seem to decode faster than JSON::XS, but the
850     result will be broken due to missing (or wrong) unicode handling. Others
851     refuse to decode or encode properly, so it was impossible to prepare a
852     fair comparison table for that case.
853    
854     SECURITY CONSIDERATIONS
855     When you are using JSON in a protocol, talking to untrusted potentially
856     hostile creatures requires relatively few measures.
857    
858     First of all, your JSON decoder should be secure, that is, should not
859     have any buffer overflows. Obviously, this module should ensure that and
860     I am trying hard on making that true, but you never know.
861    
862     Second, you need to avoid resource-starving attacks. That means you
863     should limit the size of JSON texts you accept, or make sure then when
864     your resources run out, thats just fine (e.g. by using a separate
865     process that can crash safely). The size of a JSON text in octets or
866     characters is usually a good indication of the size of the resources
867     required to decode it into a Perl structure. While JSON::XS can check
868     the size of the JSON text, it might be too late when you already have it
869     in memory, so you might want to check the size before you accept the
870     string.
871    
872     Third, JSON::XS recurses using the C stack when decoding objects and
873     arrays. The C stack is a limited resource: for instance, on my amd64
874     machine with 8MB of stack size I can decode around 180k nested arrays
875     but only 14k nested JSON objects (due to perl itself recursing deeply on
876     croak to free the temporary). If that is exceeded, the program crashes.
877     to be conservative, the default nesting limit is set to 512. If your
878     process has a smaller stack, you should adjust this setting accordingly
879     with the "max_depth" method.
880    
881     And last but least, something else could bomb you that I forgot to think
882     of. In that case, you get to keep the pieces. I am always open for
883     hints, though...
884    
885     If you are using JSON::XS to return packets to consumption by javascript
886     scripts in a browser you should have a look at
887     <http://jpsykes.com/47/practical-csrf-and-json-security> to see wether
888     you are vulnerable to some common attack vectors (which really are
889     browser design bugs, but it is still you who will have to deal with it,
890     as major browser developers care only for features, not about doing
891     security right).
892    
893     THREADS
894     This module is *not* guarenteed to be thread safe and there are no plans
895     to change this until Perl gets thread support (as opposed to the
896     horribly slow so-called "threads" which are simply slow and bloated
897     process simulations - use fork, its *much* faster, cheaper, better).
898    
899     (It might actually work, but you ahve ben warned).
900    
901     BUGS
902     While the goal of this module is to be correct, that unfortunately does
903     not mean its bug-free, only that I think its design is bug-free. It is
904     still relatively early in its development. If you keep reporting bugs
905     they will be fixed swiftly, though.
906    
907     Please refrain from using rt.cpan.org or any other bug reporting
908     service. I put the contact address into my modules for a reason.
909    
910     AUTHOR
911     Marc Lehmann <schmorp@schmorp.de>
912     http://home.schmorp.de/
913