ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/JSON-XS/XS.pm
Revision: 1.43
Committed: Sat Jun 23 23:49:29 2007 UTC (16 years, 10 months ago) by root
Branch: MAIN
CVS Tags: rel-1_3
Changes since 1.42: +43 -14 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 =head1 NAME
2    
3     JSON::XS - JSON serialising/deserialising, done correctly and fast
4    
5     =head1 SYNOPSIS
6    
7     use JSON::XS;
8    
9 root 1.22 # exported functions, they croak on error
10     # and expect/generate UTF-8
11 root 1.12
12     $utf8_encoded_json_text = to_json $perl_hash_or_arrayref;
13     $perl_hash_or_arrayref = from_json $utf8_encoded_json_text;
14    
15 root 1.22 # objToJson and jsonToObj aliases to to_json and from_json
16     # are exported for compatibility to the JSON module,
17     # but should not be used in new code.
18 root 1.21
19 root 1.22 # OO-interface
20 root 1.12
21     $coder = JSON::XS->new->ascii->pretty->allow_nonref;
22     $pretty_printed_unencoded = $coder->encode ($perl_scalar);
23     $perl_scalar = $coder->decode ($unicode_json_text);
24    
25 root 1.1 =head1 DESCRIPTION
26    
27 root 1.2 This module converts Perl data structures to JSON and vice versa. Its
28     primary goal is to be I<correct> and its secondary goal is to be
29     I<fast>. To reach the latter goal it was written in C.
30    
31     As this is the n-th-something JSON module on CPAN, what was the reason
32     to write yet another JSON module? While it seems there are many JSON
33     modules, none of them correctly handle all corner cases, and in most cases
34     their maintainers are unresponsive, gone missing, or not listening to bug
35     reports for other reasons.
36    
37     See COMPARISON, below, for a comparison to some other JSON modules.
38    
39 root 1.10 See MAPPING, below, on how JSON::XS maps perl values to JSON values and
40     vice versa.
41    
42 root 1.2 =head2 FEATURES
43    
44 root 1.1 =over 4
45    
46 root 1.21 =item * correct unicode handling
47 root 1.2
48 root 1.10 This module knows how to handle Unicode, and even documents how and when
49     it does so.
50 root 1.2
51     =item * round-trip integrity
52    
53     When you serialise a perl data structure using only datatypes supported
54     by JSON, the deserialised data structure is identical on the Perl level.
55 root 1.21 (e.g. the string "2.0" doesn't suddenly become "2" just because it looks
56     like a number).
57 root 1.2
58     =item * strict checking of JSON correctness
59    
60 root 1.16 There is no guessing, no generating of illegal JSON texts by default,
61 root 1.10 and only JSON is accepted as input by default (the latter is a security
62     feature).
63 root 1.2
64     =item * fast
65    
66 root 1.10 Compared to other JSON modules, this module compares favourably in terms
67     of speed, too.
68 root 1.2
69     =item * simple to use
70    
71     This module has both a simple functional interface as well as an OO
72     interface.
73    
74     =item * reasonably versatile output formats
75    
76 root 1.10 You can choose between the most compact guarenteed single-line format
77 root 1.21 possible (nice for simple line-based protocols), a pure-ascii format
78     (for when your transport is not 8-bit clean, still supports the whole
79     unicode range), or a pretty-printed format (for when you want to read that
80     stuff). Or you can combine those features in whatever way you like.
81 root 1.2
82     =back
83    
84 root 1.1 =cut
85    
86     package JSON::XS;
87    
88 root 1.20 use strict;
89    
90 root 1.43 our $VERSION = '1.3';
91     our @ISA = qw(Exporter);
92 root 1.1
93 root 1.43 our @EXPORT = qw(to_json from_json objToJson jsonToObj);
94 root 1.1
95 root 1.43 use Exporter;
96     use XSLoader;
97 root 1.1
98 root 1.2 =head1 FUNCTIONAL INTERFACE
99    
100     The following convinience methods are provided by this module. They are
101     exported by default:
102    
103     =over 4
104    
105 root 1.16 =item $json_text = to_json $perl_scalar
106 root 1.2
107     Converts the given Perl data structure (a simple scalar or a reference to
108     a hash or array) to a UTF-8 encoded, binary string (that is, the string contains
109     octets only). Croaks on error.
110    
111 root 1.16 This function call is functionally identical to:
112 root 1.2
113 root 1.16 $json_text = JSON::XS->new->utf8->encode ($perl_scalar)
114    
115     except being faster.
116    
117     =item $perl_scalar = from_json $json_text
118 root 1.2
119     The opposite of C<to_json>: expects an UTF-8 (binary) string and tries to
120 root 1.16 parse that as an UTF-8 encoded JSON text, returning the resulting simple
121 root 1.2 scalar or reference. Croaks on error.
122    
123 root 1.16 This function call is functionally identical to:
124    
125     $perl_scalar = JSON::XS->new->utf8->decode ($json_text)
126    
127     except being faster.
128 root 1.2
129 root 1.43 =item $is_boolean = JSON::XS::is_bool $scalar
130    
131     Returns true if the passed scalar represents either JSON::XS::true or
132     JSON::XS::false, two constants that act like C<1> and C<0>, respectively
133     and are used to represent JSON C<true> and C<false> values in Perl.
134    
135     See MAPPING, below, for more information on how JSON values are mapped to
136     Perl.
137    
138 root 1.2 =back
139    
140 root 1.23
141 root 1.2 =head1 OBJECT-ORIENTED INTERFACE
142    
143     The object oriented interface lets you configure your own encoding or
144     decoding style, within the limits of supported formats.
145    
146     =over 4
147    
148     =item $json = new JSON::XS
149    
150     Creates a new JSON::XS object that can be used to de/encode JSON
151     strings. All boolean flags described below are by default I<disabled>.
152 root 1.1
153 root 1.2 The mutators for flags all return the JSON object again and thus calls can
154     be chained:
155    
156 root 1.16 my $json = JSON::XS->new->utf8->space_after->encode ({a => [1,2]})
157 root 1.3 => {"a": [1, 2]}
158 root 1.2
159 root 1.7 =item $json = $json->ascii ([$enable])
160 root 1.2
161 root 1.16 If C<$enable> is true (or missing), then the C<encode> method will not
162     generate characters outside the code range C<0..127> (which is ASCII). Any
163     unicode characters outside that range will be escaped using either a
164     single \uXXXX (BMP characters) or a double \uHHHH\uLLLLL escape sequence,
165 root 1.32 as per RFC4627. The resulting encoded JSON text can be treated as a native
166     unicode string, an ascii-encoded, latin1-encoded or UTF-8 encoded string,
167     or any other superset of ASCII.
168 root 1.2
169     If C<$enable> is false, then the C<encode> method will not escape Unicode
170 root 1.33 characters unless required by the JSON syntax or other flags. This results
171     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 root 1.2
177 root 1.16 JSON::XS->new->ascii (1)->encode ([chr 0x10401])
178     => ["\ud801\udc01"]
179 root 1.3
180 root 1.33 =item $json = $json->latin1 ([$enable])
181    
182     If C<$enable> is true (or missing), then the C<encode> method will encode
183     the resulting JSON text as latin1 (or iso-8859-1), escaping any characters
184     outside the code range C<0..255>. The resulting string can be treated as a
185     latin1-encoded JSON text or a native unicode string. The C<decode> method
186     will not be affected in any way by this flag, as C<decode> by default
187     expects unicode, which is a strict superset of latin1.
188    
189     If C<$enable> is false, then the C<encode> method will not escape Unicode
190     characters unless required by the JSON syntax or other flags.
191    
192     The main use for this flag is efficiently encoding binary data as JSON
193     text, as most octets will not be escaped, resulting in a smaller encoded
194     size. The disadvantage is that the resulting JSON text is encoded
195     in latin1 (and must correctly be treated as such when storing and
196     transfering), a rare encoding for JSON. It is therefore most useful when
197     you want to store data structures known to contain binary data efficiently
198     in files or databases, not when talking to other JSON encoders/decoders.
199    
200     JSON::XS->new->latin1->encode (["\x{89}\x{abc}"]
201     => ["\x{89}\\u0abc"] # (perl syntax, U+abc escaped, U+89 not)
202    
203 root 1.7 =item $json = $json->utf8 ([$enable])
204 root 1.2
205 root 1.7 If C<$enable> is true (or missing), then the C<encode> method will encode
206 root 1.16 the JSON result into UTF-8, as required by many protocols, while the
207 root 1.7 C<decode> method expects to be handled an UTF-8-encoded string. Please
208     note that UTF-8-encoded strings do not contain any characters outside the
209 root 1.16 range C<0..255>, they are thus useful for bytewise/binary I/O. In future
210     versions, enabling this option might enable autodetection of the UTF-16
211     and UTF-32 encoding families, as described in RFC4627.
212 root 1.2
213     If C<$enable> is false, then the C<encode> method will return the JSON
214     string as a (non-encoded) unicode string, while C<decode> expects thus a
215     unicode string. Any decoding or encoding (e.g. to UTF-8 or UTF-16) needs
216     to be done yourself, e.g. using the Encode module.
217    
218 root 1.16 Example, output UTF-16BE-encoded JSON:
219    
220     use Encode;
221     $jsontext = encode "UTF-16BE", JSON::XS->new->encode ($object);
222    
223     Example, decode UTF-32LE-encoded JSON:
224    
225     use Encode;
226     $object = JSON::XS->new->decode (decode "UTF-32LE", $jsontext);
227 root 1.12
228 root 1.7 =item $json = $json->pretty ([$enable])
229 root 1.2
230     This enables (or disables) all of the C<indent>, C<space_before> and
231 root 1.3 C<space_after> (and in the future possibly more) flags in one call to
232 root 1.2 generate the most readable (or most compact) form possible.
233    
234 root 1.12 Example, pretty-print some simple structure:
235    
236 root 1.3 my $json = JSON::XS->new->pretty(1)->encode ({a => [1,2]})
237     =>
238     {
239     "a" : [
240     1,
241     2
242     ]
243     }
244    
245 root 1.7 =item $json = $json->indent ([$enable])
246 root 1.2
247 root 1.7 If C<$enable> is true (or missing), then the C<encode> method will use a multiline
248 root 1.2 format as output, putting every array member or object/hash key-value pair
249     into its own line, identing them properly.
250    
251     If C<$enable> is false, no newlines or indenting will be produced, and the
252 root 1.16 resulting JSON text is guarenteed not to contain any C<newlines>.
253 root 1.2
254 root 1.16 This setting has no effect when decoding JSON texts.
255 root 1.2
256 root 1.7 =item $json = $json->space_before ([$enable])
257 root 1.2
258 root 1.7 If C<$enable> is true (or missing), then the C<encode> method will add an extra
259 root 1.2 optional space before the C<:> separating keys from values in JSON objects.
260    
261     If C<$enable> is false, then the C<encode> method will not add any extra
262     space at those places.
263    
264 root 1.16 This setting has no effect when decoding JSON texts. You will also
265     most likely combine this setting with C<space_after>.
266 root 1.2
267 root 1.12 Example, space_before enabled, space_after and indent disabled:
268    
269     {"key" :"value"}
270    
271 root 1.7 =item $json = $json->space_after ([$enable])
272 root 1.2
273 root 1.7 If C<$enable> is true (or missing), then the C<encode> method will add an extra
274 root 1.2 optional space after the C<:> separating keys from values in JSON objects
275     and extra whitespace after the C<,> separating key-value pairs and array
276     members.
277    
278     If C<$enable> is false, then the C<encode> method will not add any extra
279     space at those places.
280    
281 root 1.16 This setting has no effect when decoding JSON texts.
282 root 1.2
283 root 1.12 Example, space_before and indent disabled, space_after enabled:
284    
285     {"key": "value"}
286    
287 root 1.7 =item $json = $json->canonical ([$enable])
288 root 1.2
289 root 1.7 If C<$enable> is true (or missing), then the C<encode> method will output JSON objects
290 root 1.2 by sorting their keys. This is adding a comparatively high overhead.
291    
292     If C<$enable> is false, then the C<encode> method will output key-value
293     pairs in the order Perl stores them (which will likely change between runs
294     of the same script).
295    
296     This option is useful if you want the same data structure to be encoded as
297 root 1.16 the same JSON text (given the same overall settings). If it is disabled,
298 root 1.2 the same hash migh be encoded differently even if contains the same data,
299     as key-value pairs have no inherent ordering in Perl.
300    
301 root 1.16 This setting has no effect when decoding JSON texts.
302 root 1.2
303 root 1.7 =item $json = $json->allow_nonref ([$enable])
304 root 1.3
305 root 1.7 If C<$enable> is true (or missing), then the C<encode> method can convert a
306 root 1.3 non-reference into its corresponding string, number or null JSON value,
307     which is an extension to RFC4627. Likewise, C<decode> will accept those JSON
308     values instead of croaking.
309    
310     If C<$enable> is false, then the C<encode> method will croak if it isn't
311 root 1.16 passed an arrayref or hashref, as JSON texts must either be an object
312 root 1.3 or array. Likewise, C<decode> will croak if given something that is not a
313     JSON object or array.
314    
315 root 1.12 Example, encode a Perl scalar as JSON value with enabled C<allow_nonref>,
316     resulting in an invalid JSON text:
317    
318     JSON::XS->new->allow_nonref->encode ("Hello, World!")
319     => "Hello, World!"
320    
321 root 1.7 =item $json = $json->shrink ([$enable])
322    
323     Perl usually over-allocates memory a bit when allocating space for
324 root 1.24 strings. This flag optionally resizes strings generated by either
325 root 1.7 C<encode> or C<decode> to their minimum size possible. This can save
326 root 1.16 memory when your JSON texts are either very very long or you have many
327 root 1.8 short strings. It will also try to downgrade any strings to octet-form
328     if possible: perl stores strings internally either in an encoding called
329     UTF-X or in octet-form. The latter cannot store everything but uses less
330 root 1.24 space in general (and some buggy Perl or C code might even rely on that
331     internal representation being used).
332 root 1.7
333 root 1.24 The actual definition of what shrink does might change in future versions,
334     but it will always try to save space at the expense of time.
335    
336     If C<$enable> is true (or missing), the string returned by C<encode> will
337     be shrunk-to-fit, while all strings generated by C<decode> will also be
338     shrunk-to-fit.
339 root 1.7
340     If C<$enable> is false, then the normal perl allocation algorithms are used.
341     If you work with your data, then this is likely to be faster.
342    
343     In the future, this setting might control other things, such as converting
344     strings that look like integers or floats into integers or floats
345     internally (there is no difference on the Perl level), saving space.
346    
347 root 1.23 =item $json = $json->max_depth ([$maximum_nesting_depth])
348    
349 root 1.28 Sets the maximum nesting level (default C<512>) accepted while encoding
350 root 1.23 or decoding. If the JSON text or Perl data structure has an equal or
351     higher nesting level then this limit, then the encoder and decoder will
352     stop and croak at that point.
353    
354     Nesting level is defined by number of hash- or arrayrefs that the encoder
355     needs to traverse to reach a given point or the number of C<{> or C<[>
356     characters without their matching closing parenthesis crossed to reach a
357     given character in a string.
358    
359     Setting the maximum depth to one disallows any nesting, so that ensures
360     that the object is only a single hash/object or array.
361    
362     The argument to C<max_depth> will be rounded up to the next nearest power
363     of two.
364    
365     See SECURITY CONSIDERATIONS, below, for more info on why this is useful.
366    
367 root 1.16 =item $json_text = $json->encode ($perl_scalar)
368 root 1.2
369     Converts the given Perl data structure (a simple scalar or a reference
370     to a hash or array) to its JSON representation. Simple scalars will be
371     converted into JSON string or number sequences, while references to arrays
372     become JSON arrays and references to hashes become JSON objects. Undefined
373     Perl values (e.g. C<undef>) become JSON C<null> values. Neither C<true>
374     nor C<false> values will be generated.
375 root 1.1
376 root 1.16 =item $perl_scalar = $json->decode ($json_text)
377 root 1.1
378 root 1.16 The opposite of C<encode>: expects a JSON text and tries to parse it,
379 root 1.2 returning the resulting simple scalar or reference. Croaks on error.
380 root 1.1
381 root 1.2 JSON numbers and strings become simple Perl scalars. JSON arrays become
382     Perl arrayrefs and JSON objects become Perl hashrefs. C<true> becomes
383     C<1>, C<false> becomes C<0> and C<null> becomes C<undef>.
384 root 1.1
385 root 1.34 =item ($perl_scalar, $characters) = $json->decode_prefix ($json_text)
386    
387     This works like the C<decode> method, but instead of raising an exception
388     when there is trailing garbage after the first JSON object, it will
389     silently stop parsing there and return the number of characters consumed
390     so far.
391    
392     This is useful if your JSON texts are not delimited by an outer protocol
393     (which is not the brightest thing to do in the first place) and you need
394     to know where the JSON text ends.
395    
396     JSON::XS->new->decode_prefix ("[1] the tail")
397     => ([], 3)
398    
399 root 1.1 =back
400    
401 root 1.23
402 root 1.10 =head1 MAPPING
403    
404     This section describes how JSON::XS maps Perl values to JSON values and
405     vice versa. These mappings are designed to "do the right thing" in most
406     circumstances automatically, preserving round-tripping characteristics
407     (what you put in comes out as something equivalent).
408    
409     For the more enlightened: note that in the following descriptions,
410     lowercase I<perl> refers to the Perl interpreter, while uppcercase I<Perl>
411     refers to the abstract Perl language itself.
412    
413 root 1.39
414 root 1.10 =head2 JSON -> PERL
415    
416     =over 4
417    
418     =item object
419    
420     A JSON object becomes a reference to a hash in Perl. No ordering of object
421 root 1.14 keys is preserved (JSON does not preserver object key ordering itself).
422 root 1.10
423     =item array
424    
425     A JSON array becomes a reference to an array in Perl.
426    
427     =item string
428    
429     A JSON string becomes a string scalar in Perl - Unicode codepoints in JSON
430     are represented by the same codepoints in the Perl string, so no manual
431     decoding is necessary.
432    
433     =item number
434    
435     A JSON number becomes either an integer or numeric (floating point)
436     scalar in perl, depending on its range and any fractional parts. On the
437     Perl level, there is no difference between those as Perl handles all the
438     conversion details, but an integer may take slightly less memory and might
439     represent more values exactly than (floating point) numbers.
440    
441     =item true, false
442    
443 root 1.43 These JSON atoms become C<JSON::XS::true> and C<JSON::XS::false>,
444     respectively. They are overloaded to act almost exactly like the numbers
445     C<1> and C<0>. You can check wether a scalar is a JSON boolean by using
446     the C<JSON::XS::is_bool> function.
447 root 1.10
448     =item null
449    
450     A JSON null atom becomes C<undef> in Perl.
451    
452     =back
453    
454 root 1.39
455 root 1.10 =head2 PERL -> JSON
456    
457     The mapping from Perl to JSON is slightly more difficult, as Perl is a
458     truly typeless language, so we can only guess which JSON type is meant by
459     a Perl value.
460    
461     =over 4
462    
463     =item hash references
464    
465     Perl hash references become JSON objects. As there is no inherent ordering
466 root 1.25 in hash keys (or JSON objects), they will usually be encoded in a
467     pseudo-random order that can change between runs of the same program but
468     stays generally the same within a single run of a program. JSON::XS can
469     optionally sort the hash keys (determined by the I<canonical> flag), so
470     the same datastructure will serialise to the same JSON text (given same
471     settings and version of JSON::XS), but this incurs a runtime overhead
472     and is only rarely useful, e.g. when you want to compare some JSON text
473     against another for equality.
474 root 1.10
475     =item array references
476    
477     Perl array references become JSON arrays.
478    
479 root 1.25 =item other references
480    
481     Other unblessed references are generally not allowed and will cause an
482     exception to be thrown, except for references to the integers C<0> and
483     C<1>, which get turned into C<false> and C<true> atoms in JSON. You can
484     also use C<JSON::XS::false> and C<JSON::XS::true> to improve readability.
485    
486     to_json [\0,JSON::XS::true] # yields [false,true]
487    
488 root 1.43 =item JSON::XS::true, JSON::XS::false
489    
490     These special values become JSON true and JSON false values,
491     respectively. You cna alos use C<\1> and C<\0> directly if you want.
492    
493 root 1.10 =item blessed objects
494    
495     Blessed objects are not allowed. JSON::XS currently tries to encode their
496     underlying representation (hash- or arrayref), but this behaviour might
497     change in future versions.
498    
499     =item simple scalars
500    
501     Simple Perl scalars (any scalar that is not a reference) are the most
502     difficult objects to encode: JSON::XS will encode undefined scalars as
503     JSON null value, scalars that have last been used in a string context
504     before encoding as JSON strings and anything else as number value:
505    
506     # dump as number
507     to_json [2] # yields [2]
508     to_json [-3.0e17] # yields [-3e+17]
509     my $value = 5; to_json [$value] # yields [5]
510    
511     # used as string, so dump as string
512     print $value;
513     to_json [$value] # yields ["5"]
514    
515     # undef becomes null
516     to_json [undef] # yields [null]
517    
518     You can force the type to be a string by stringifying it:
519    
520     my $x = 3.1; # some variable containing a number
521     "$x"; # stringified
522     $x .= ""; # another, more awkward way to stringify
523     print $x; # perl does it for you, too, quite often
524    
525     You can force the type to be a number by numifying it:
526    
527     my $x = "3"; # some variable containing a string
528     $x += 0; # numify it, ensuring it will be dumped as a number
529     $x *= 1; # same thing, the choise is yours.
530    
531     You can not currently output JSON booleans or force the type in other,
532     less obscure, ways. Tell me if you need this capability.
533    
534     =back
535    
536 root 1.23
537 root 1.3 =head1 COMPARISON
538    
539     As already mentioned, this module was created because none of the existing
540     JSON modules could be made to work correctly. First I will describe the
541     problems (or pleasures) I encountered with various existing JSON modules,
542 root 1.4 followed by some benchmark values. JSON::XS was designed not to suffer
543     from any of these problems or limitations.
544 root 1.3
545     =over 4
546    
547 root 1.5 =item JSON 1.07
548 root 1.3
549     Slow (but very portable, as it is written in pure Perl).
550    
551     Undocumented/buggy Unicode handling (how JSON handles unicode values is
552     undocumented. One can get far by feeding it unicode strings and doing
553     en-/decoding oneself, but unicode escapes are not working properly).
554    
555     No roundtripping (strings get clobbered if they look like numbers, e.g.
556     the string C<2.0> will encode to C<2.0> instead of C<"2.0">, and that will
557     decode into the number 2.
558    
559 root 1.5 =item JSON::PC 0.01
560 root 1.3
561     Very fast.
562    
563     Undocumented/buggy Unicode handling.
564    
565     No roundtripping.
566    
567 root 1.4 Has problems handling many Perl values (e.g. regex results and other magic
568     values will make it croak).
569 root 1.3
570     Does not even generate valid JSON (C<{1,2}> gets converted to C<{1:2}>
571 root 1.16 which is not a valid JSON text.
572 root 1.3
573     Unmaintained (maintainer unresponsive for many months, bugs are not
574     getting fixed).
575    
576 root 1.5 =item JSON::Syck 0.21
577 root 1.3
578     Very buggy (often crashes).
579    
580 root 1.4 Very inflexible (no human-readable format supported, format pretty much
581     undocumented. I need at least a format for easy reading by humans and a
582     single-line compact format for use in a protocol, and preferably a way to
583 root 1.16 generate ASCII-only JSON texts).
584 root 1.3
585     Completely broken (and confusingly documented) Unicode handling (unicode
586     escapes are not working properly, you need to set ImplicitUnicode to
587     I<different> values on en- and decoding to get symmetric behaviour).
588    
589     No roundtripping (simple cases work, but this depends on wether the scalar
590     value was used in a numeric context or not).
591    
592     Dumping hashes may skip hash values depending on iterator state.
593    
594     Unmaintained (maintainer unresponsive for many months, bugs are not
595     getting fixed).
596    
597     Does not check input for validity (i.e. will accept non-JSON input and
598     return "something" instead of raising an exception. This is a security
599     issue: imagine two banks transfering money between each other using
600     JSON. One bank might parse a given non-JSON request and deduct money,
601     while the other might reject the transaction with a syntax error. While a
602     good protocol will at least recover, that is extra unnecessary work and
603     the transaction will still not succeed).
604    
605 root 1.5 =item JSON::DWIW 0.04
606 root 1.3
607     Very fast. Very natural. Very nice.
608    
609     Undocumented unicode handling (but the best of the pack. Unicode escapes
610     still don't get parsed properly).
611    
612     Very inflexible.
613    
614     No roundtripping.
615    
616 root 1.16 Does not generate valid JSON texts (key strings are often unquoted, empty keys
617 root 1.4 result in nothing being output)
618    
619 root 1.3 Does not check input for validity.
620    
621     =back
622    
623 root 1.39
624     =head2 JSON and YAML
625    
626     You often hear that JSON is a subset (or a close subset) of YAML. This is,
627     however, a mass hysteria and very far from the truth. In general, there is
628     no way to configure JSON::XS to output a data structure as valid YAML.
629    
630 root 1.41 If you really must use JSON::XS to generate YAML, you should use this
631 root 1.39 algorithm (subject to change in future versions):
632    
633     my $to_yaml = JSON::XS->new->utf8->space_after (1);
634     my $yaml = $to_yaml->encode ($ref) . "\n";
635    
636     This will usually generate JSON texts that also parse as valid
637 root 1.41 YAML. Please note that YAML has hardcoded limits on (simple) object key
638     lengths that JSON doesn't have, so you should make sure that your hash
639     keys are noticably shorter than the 1024 characters YAML allows.
640 root 1.39
641     There might be other incompatibilities that I am not aware of. In general
642     you should not try to generate YAML with a JSON generator or vice versa,
643 root 1.41 or try to parse JSON with a YAML parser or vice versa: chances are high
644     that you will run into severe interoperability problems.
645 root 1.39
646    
647 root 1.3 =head2 SPEED
648    
649 root 1.4 It seems that JSON::XS is surprisingly fast, as shown in the following
650     tables. They have been generated with the help of the C<eg/bench> program
651     in the JSON::XS distribution, to make it easy to compare on your own
652     system.
653    
654 root 1.37 First comes a comparison between various modules using a very short
655     single-line JSON string:
656 root 1.18
657 root 1.37 {"method": "handleMessage", "params": ["user1", "we were just talking"], \
658 root 1.38 "id": null, "array":[1,11,234,-5,1e5,1e7, true, false]}
659 root 1.18
660 root 1.39 It shows the number of encodes/decodes per second (JSON::XS uses
661     the functional interface, while JSON::XS/2 uses the OO interface
662     with pretty-printing and hashkey sorting enabled, JSON::XS/3 enables
663     shrink). Higher is better:
664 root 1.4
665     module | encode | decode |
666     -----------|------------|------------|
667 root 1.38 JSON | 7645.468 | 4208.613 |
668 root 1.40 JSON::DWIW | 40721.398 | 77101.176 |
669 root 1.38 JSON::PC | 65948.176 | 78251.940 |
670 root 1.40 JSON::Syck | 22844.793 | 26479.192 |
671 root 1.38 JSON::XS | 388361.481 | 199728.762 |
672     JSON::XS/2 | 218453.333 | 192399.266 |
673     JSON::XS/3 | 338250.323 | 192399.266 |
674 root 1.40 Storable | 15779.925 | 14169.946 |
675 root 1.4 -----------+------------+------------+
676    
677 root 1.37 That is, JSON::XS is about five times faster than JSON::DWIW on encoding,
678 root 1.38 about three times faster on decoding, and over fourty times faster
679 root 1.37 than JSON, even with pretty-printing and key sorting. It also compares
680     favourably to Storable for small amounts of data.
681 root 1.4
682 root 1.13 Using a longer test string (roughly 18KB, generated from Yahoo! Locals
683 root 1.4 search API (http://nanoref.com/yahooapis/mgPdGg):
684    
685     module | encode | decode |
686     -----------|------------|------------|
687 root 1.37 JSON | 254.685 | 37.665 |
688 root 1.40 JSON::DWIW | 843.343 | 1049.731 |
689 root 1.37 JSON::PC | 3602.116 | 2307.352 |
690 root 1.40 JSON::Syck | 505.107 | 787.899 |
691     JSON::XS | 5747.196 | 3690.220 |
692     JSON::XS/2 | 3968.121 | 3676.634 |
693     JSON::XS/3 | 6105.246 | 3662.508 |
694     Storable | 4417.337 | 5285.161 |
695 root 1.4 -----------+------------+------------+
696    
697 root 1.40 Again, JSON::XS leads by far (except for Storable which non-surprisingly
698     decodes faster).
699 root 1.4
700 root 1.18 On large strings containing lots of high unicode characters, some modules
701     (such as JSON::PC) seem to decode faster than JSON::XS, but the result
702     will be broken due to missing (or wrong) unicode handling. Others refuse
703     to decode or encode properly, so it was impossible to prepare a fair
704     comparison table for that case.
705 root 1.13
706 root 1.11
707 root 1.23 =head1 SECURITY CONSIDERATIONS
708    
709     When you are using JSON in a protocol, talking to untrusted potentially
710     hostile creatures requires relatively few measures.
711    
712     First of all, your JSON decoder should be secure, that is, should not have
713     any buffer overflows. Obviously, this module should ensure that and I am
714     trying hard on making that true, but you never know.
715    
716     Second, you need to avoid resource-starving attacks. That means you should
717     limit the size of JSON texts you accept, or make sure then when your
718     resources run out, thats just fine (e.g. by using a separate process that
719     can crash safely). The size of a JSON text in octets or characters is
720     usually a good indication of the size of the resources required to decode
721     it into a Perl structure.
722    
723     Third, JSON::XS recurses using the C stack when decoding objects and
724     arrays. The C stack is a limited resource: for instance, on my amd64
725 root 1.28 machine with 8MB of stack size I can decode around 180k nested arrays but
726     only 14k nested JSON objects (due to perl itself recursing deeply on croak
727     to free the temporary). If that is exceeded, the program crashes. to be
728     conservative, the default nesting limit is set to 512. If your process
729     has a smaller stack, you should adjust this setting accordingly with the
730     C<max_depth> method.
731 root 1.23
732     And last but least, something else could bomb you that I forgot to think
733 root 1.30 of. In that case, you get to keep the pieces. I am always open for hints,
734 root 1.23 though...
735    
736 root 1.42 If you are using JSON::XS to return packets to consumption
737     by javascript scripts in a browser you should have a look at
738     L<http://jpsykes.com/47/practical-csrf-and-json-security> to see wether
739     you are vulnerable to some common attack vectors (which really are browser
740     design bugs, but it is still you who will have to deal with it, as major
741     browser developers care only for features, not about doing security
742     right).
743    
744 root 1.11
745 root 1.4 =head1 BUGS
746    
747     While the goal of this module is to be correct, that unfortunately does
748     not mean its bug-free, only that I think its design is bug-free. It is
749 root 1.23 still relatively early in its development. If you keep reporting bugs they
750     will be fixed swiftly, though.
751 root 1.4
752 root 1.2 =cut
753    
754 root 1.43 our $true = do { bless \(my $dummy = 1), "JSON::XS::Boolean" };
755     our $false = do { bless \(my $dummy = 0), "JSON::XS::Boolean" };
756    
757     sub true() { $true }
758     sub false() { $false }
759    
760     sub is_bool($) {
761     UNIVERSAL::isa $_[0], "JSON::XS::Boolean"
762     or UNIVERSAL::isa $_[0], "JSON::Literal"
763     }
764    
765     XSLoader::load "JSON::XS", $VERSION;
766    
767     package JSON::XS::Boolean;
768    
769     use overload
770     "0+" => sub { ${$_[0]} },
771     "++" => sub { $_[0] = ${$_[0]} + 1 },
772     "--" => sub { $_[0] = ${$_[0]} - 1 },
773     fallback => 1;
774 root 1.25
775 root 1.2 1;
776    
777 root 1.1 =head1 AUTHOR
778    
779     Marc Lehmann <schmorp@schmorp.de>
780     http://home.schmorp.de/
781    
782     =cut
783