ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/JSON-XS/XS.pm
(Generate patch)

Comparing JSON-XS/XS.pm (file contents):
Revision 1.8 by root, Fri Mar 23 15:57:18 2007 UTC vs.
Revision 1.21 by root, Sun Mar 25 02:32:40 2007 UTC

3JSON::XS - JSON serialising/deserialising, done correctly and fast 3JSON::XS - JSON serialising/deserialising, done correctly and fast
4 4
5=head1 SYNOPSIS 5=head1 SYNOPSIS
6 6
7 use JSON::XS; 7 use JSON::XS;
8
9 # exported functions, croak on error
10
11 $utf8_encoded_json_text = to_json $perl_hash_or_arrayref;
12 $perl_hash_or_arrayref = from_json $utf8_encoded_json_text;
13
14 # objToJson and jsonToObj are exported for JSON
15 # compatibility, but should not be used in new code.
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);
8 22
9=head1 DESCRIPTION 23=head1 DESCRIPTION
10 24
11This module converts Perl data structures to JSON and vice versa. Its 25This module converts Perl data structures to JSON and vice versa. Its
12primary goal is to be I<correct> and its secondary goal is to be 26primary goal is to be I<correct> and its secondary goal is to be
18their maintainers are unresponsive, gone missing, or not listening to bug 32their maintainers are unresponsive, gone missing, or not listening to bug
19reports for other reasons. 33reports for other reasons.
20 34
21See COMPARISON, below, for a comparison to some other JSON modules. 35See COMPARISON, below, for a comparison to some other JSON modules.
22 36
37See MAPPING, below, on how JSON::XS maps perl values to JSON values and
38vice versa.
39
23=head2 FEATURES 40=head2 FEATURES
24 41
25=over 4 42=over 4
26 43
27=item * correct handling of unicode issues 44=item * correct unicode handling
28 45
29This module knows how to handle Unicode, and even documents how it does so. 46This module knows how to handle Unicode, and even documents how and when
47it does so.
30 48
31=item * round-trip integrity 49=item * round-trip integrity
32 50
33When you serialise a perl data structure using only datatypes supported 51When you serialise a perl data structure using only datatypes supported
34by JSON, the deserialised data structure is identical on the Perl level. 52by JSON, the deserialised data structure is identical on the Perl level.
35(e.g. the string "2.0" doesn't suddenly become "2"). 53(e.g. the string "2.0" doesn't suddenly become "2" just because it looks
54like a number).
36 55
37=item * strict checking of JSON correctness 56=item * strict checking of JSON correctness
38 57
39There is no guessing, no generating of illegal JSON strings by default, 58There is no guessing, no generating of illegal JSON texts by default,
40and only JSON is accepted as input (the latter is a security feature). 59and only JSON is accepted as input by default (the latter is a security
60feature).
41 61
42=item * fast 62=item * fast
43 63
44compared to other JSON modules, this module compares favourably. 64Compared to other JSON modules, this module compares favourably in terms
65of speed, too.
45 66
46=item * simple to use 67=item * simple to use
47 68
48This module has both a simple functional interface as well as an OO 69This module has both a simple functional interface as well as an OO
49interface. 70interface.
50 71
51=item * reasonably versatile output formats 72=item * reasonably versatile output formats
52 73
53You can choose between the most compact format possible, a pure-ascii 74You can choose between the most compact guarenteed single-line format
54format, or a pretty-printed format. Or you can combine those features in 75possible (nice for simple line-based protocols), a pure-ascii format
55whatever way you like. 76(for when your transport is not 8-bit clean, still supports the whole
77unicode range), or a pretty-printed format (for when you want to read that
78stuff). Or you can combine those features in whatever way you like.
56 79
57=back 80=back
58 81
59=cut 82=cut
60 83
61package JSON::XS; 84package JSON::XS;
62 85
86use strict;
87
63BEGIN { 88BEGIN {
64 $VERSION = '0.2'; 89 our $VERSION = '0.8';
65 @ISA = qw(Exporter); 90 our @ISA = qw(Exporter);
66 91
67 @EXPORT = qw(to_json from_json); 92 our @EXPORT = qw(to_json from_json objToJson jsonToObj);
68 require Exporter; 93 require Exporter;
69 94
70 require XSLoader; 95 require XSLoader;
71 XSLoader::load JSON::XS::, $VERSION; 96 XSLoader::load JSON::XS::, $VERSION;
72} 97}
76The following convinience methods are provided by this module. They are 101The following convinience methods are provided by this module. They are
77exported by default: 102exported by default:
78 103
79=over 4 104=over 4
80 105
81=item $json_string = to_json $perl_scalar 106=item $json_text = to_json $perl_scalar
82 107
83Converts the given Perl data structure (a simple scalar or a reference to 108Converts the given Perl data structure (a simple scalar or a reference to
84a hash or array) to a UTF-8 encoded, binary string (that is, the string contains 109a hash or array) to a UTF-8 encoded, binary string (that is, the string contains
85octets only). Croaks on error. 110octets only). Croaks on error.
86 111
87This function call is functionally identical to C<< JSON::XS->new->utf8 112This function call is functionally identical to:
88(1)->encode ($perl_scalar) >>.
89 113
114 $json_text = JSON::XS->new->utf8->encode ($perl_scalar)
115
116except being faster.
117
90=item $perl_scalar = from_json $json_string 118=item $perl_scalar = from_json $json_text
91 119
92The opposite of C<to_json>: expects an UTF-8 (binary) string and tries to 120The opposite of C<to_json>: expects an UTF-8 (binary) string and tries to
93parse that as an UTF-8 encoded JSON string, returning the resulting simple 121parse that as an UTF-8 encoded JSON text, returning the resulting simple
94scalar or reference. Croaks on error. 122scalar or reference. Croaks on error.
95 123
96This function call is functionally identical to C<< JSON::XS->new->utf8 124This function call is functionally identical to:
97(1)->decode ($json_string) >>. 125
126 $perl_scalar = JSON::XS->new->utf8->decode ($json_text)
127
128except being faster.
98 129
99=back 130=back
100 131
101=head1 OBJECT-ORIENTED INTERFACE 132=head1 OBJECT-ORIENTED INTERFACE
102 133
111strings. All boolean flags described below are by default I<disabled>. 142strings. All boolean flags described below are by default I<disabled>.
112 143
113The mutators for flags all return the JSON object again and thus calls can 144The mutators for flags all return the JSON object again and thus calls can
114be chained: 145be chained:
115 146
116 my $json = JSON::XS->new->utf8(1)->space_after(1)->encode ({a => [1,2]}) 147 my $json = JSON::XS->new->utf8->space_after->encode ({a => [1,2]})
117 => {"a": [1, 2]} 148 => {"a": [1, 2]}
118 149
119=item $json = $json->ascii ([$enable]) 150=item $json = $json->ascii ([$enable])
120 151
121If C<$enable> is true (or missing), then the C<encode> method will 152If C<$enable> is true (or missing), then the C<encode> method will not
122not generate characters outside the code range C<0..127>. Any unicode 153generate characters outside the code range C<0..127> (which is ASCII). Any
123characters outside that range will be escaped using either a single 154unicode characters outside that range will be escaped using either a
124\uXXXX (BMP characters) or a double \uHHHH\uLLLLL escape sequence, as per 155single \uXXXX (BMP characters) or a double \uHHHH\uLLLLL escape sequence,
125RFC4627. 156as per RFC4627.
126 157
127If C<$enable> is false, then the C<encode> method will not escape Unicode 158If C<$enable> is false, then the C<encode> method will not escape Unicode
128characters unless necessary. 159characters unless required by the JSON syntax. This results in a faster
160and more compact format.
129 161
130 JSON::XS->new->ascii (1)->encode (chr 0x10401) 162 JSON::XS->new->ascii (1)->encode ([chr 0x10401])
131 => \ud801\udc01 163 => ["\ud801\udc01"]
132 164
133=item $json = $json->utf8 ([$enable]) 165=item $json = $json->utf8 ([$enable])
134 166
135If C<$enable> is true (or missing), then the C<encode> method will encode 167If C<$enable> is true (or missing), then the C<encode> method will encode
136the JSON string into UTF-8, as required by many protocols, while the 168the JSON result into UTF-8, as required by many protocols, while the
137C<decode> method expects to be handled an UTF-8-encoded string. Please 169C<decode> method expects to be handled an UTF-8-encoded string. Please
138note that UTF-8-encoded strings do not contain any characters outside the 170note that UTF-8-encoded strings do not contain any characters outside the
139range C<0..255>, they are thus useful for bytewise/binary I/O. 171range C<0..255>, they are thus useful for bytewise/binary I/O. In future
172versions, enabling this option might enable autodetection of the UTF-16
173and UTF-32 encoding families, as described in RFC4627.
140 174
141If C<$enable> is false, then the C<encode> method will return the JSON 175If C<$enable> is false, then the C<encode> method will return the JSON
142string as a (non-encoded) unicode string, while C<decode> expects thus a 176string as a (non-encoded) unicode string, while C<decode> expects thus a
143unicode string. Any decoding or encoding (e.g. to UTF-8 or UTF-16) needs 177unicode string. Any decoding or encoding (e.g. to UTF-8 or UTF-16) needs
144to be done yourself, e.g. using the Encode module. 178to be done yourself, e.g. using the Encode module.
145 179
180Example, output UTF-16BE-encoded JSON:
181
182 use Encode;
183 $jsontext = encode "UTF-16BE", JSON::XS->new->encode ($object);
184
185Example, decode UTF-32LE-encoded JSON:
186
187 use Encode;
188 $object = JSON::XS->new->decode (decode "UTF-32LE", $jsontext);
189
146=item $json = $json->pretty ([$enable]) 190=item $json = $json->pretty ([$enable])
147 191
148This enables (or disables) all of the C<indent>, C<space_before> and 192This enables (or disables) all of the C<indent>, C<space_before> and
149C<space_after> (and in the future possibly more) flags in one call to 193C<space_after> (and in the future possibly more) flags in one call to
150generate the most readable (or most compact) form possible. 194generate the most readable (or most compact) form possible.
195
196Example, pretty-print some simple structure:
151 197
152 my $json = JSON::XS->new->pretty(1)->encode ({a => [1,2]}) 198 my $json = JSON::XS->new->pretty(1)->encode ({a => [1,2]})
153 => 199 =>
154 { 200 {
155 "a" : [ 201 "a" : [
163If C<$enable> is true (or missing), then the C<encode> method will use a multiline 209If C<$enable> is true (or missing), then the C<encode> method will use a multiline
164format as output, putting every array member or object/hash key-value pair 210format as output, putting every array member or object/hash key-value pair
165into its own line, identing them properly. 211into its own line, identing them properly.
166 212
167If C<$enable> is false, no newlines or indenting will be produced, and the 213If C<$enable> is false, no newlines or indenting will be produced, and the
168resulting JSON strings is guarenteed not to contain any C<newlines>. 214resulting JSON text is guarenteed not to contain any C<newlines>.
169 215
170This setting has no effect when decoding JSON strings. 216This setting has no effect when decoding JSON texts.
171 217
172=item $json = $json->space_before ([$enable]) 218=item $json = $json->space_before ([$enable])
173 219
174If C<$enable> is true (or missing), then the C<encode> method will add an extra 220If C<$enable> is true (or missing), then the C<encode> method will add an extra
175optional space before the C<:> separating keys from values in JSON objects. 221optional space before the C<:> separating keys from values in JSON objects.
176 222
177If C<$enable> is false, then the C<encode> method will not add any extra 223If C<$enable> is false, then the C<encode> method will not add any extra
178space at those places. 224space at those places.
179 225
180This setting has no effect when decoding JSON strings. You will also most 226This setting has no effect when decoding JSON texts. You will also
181likely combine this setting with C<space_after>. 227most likely combine this setting with C<space_after>.
228
229Example, space_before enabled, space_after and indent disabled:
230
231 {"key" :"value"}
182 232
183=item $json = $json->space_after ([$enable]) 233=item $json = $json->space_after ([$enable])
184 234
185If C<$enable> is true (or missing), then the C<encode> method will add an extra 235If C<$enable> is true (or missing), then the C<encode> method will add an extra
186optional space after the C<:> separating keys from values in JSON objects 236optional space after the C<:> separating keys from values in JSON objects
188members. 238members.
189 239
190If C<$enable> is false, then the C<encode> method will not add any extra 240If C<$enable> is false, then the C<encode> method will not add any extra
191space at those places. 241space at those places.
192 242
193This setting has no effect when decoding JSON strings. 243This setting has no effect when decoding JSON texts.
244
245Example, space_before and indent disabled, space_after enabled:
246
247 {"key": "value"}
194 248
195=item $json = $json->canonical ([$enable]) 249=item $json = $json->canonical ([$enable])
196 250
197If C<$enable> is true (or missing), then the C<encode> method will output JSON objects 251If C<$enable> is true (or missing), then the C<encode> method will output JSON objects
198by sorting their keys. This is adding a comparatively high overhead. 252by sorting their keys. This is adding a comparatively high overhead.
200If C<$enable> is false, then the C<encode> method will output key-value 254If C<$enable> is false, then the C<encode> method will output key-value
201pairs in the order Perl stores them (which will likely change between runs 255pairs in the order Perl stores them (which will likely change between runs
202of the same script). 256of the same script).
203 257
204This option is useful if you want the same data structure to be encoded as 258This option is useful if you want the same data structure to be encoded as
205the same JSON string (given the same overall settings). If it is disabled, 259the same JSON text (given the same overall settings). If it is disabled,
206the same hash migh be encoded differently even if contains the same data, 260the same hash migh be encoded differently even if contains the same data,
207as key-value pairs have no inherent ordering in Perl. 261as key-value pairs have no inherent ordering in Perl.
208 262
209This setting has no effect when decoding JSON strings. 263This setting has no effect when decoding JSON texts.
210 264
211=item $json = $json->allow_nonref ([$enable]) 265=item $json = $json->allow_nonref ([$enable])
212 266
213If C<$enable> is true (or missing), then the C<encode> method can convert a 267If C<$enable> is true (or missing), then the C<encode> method can convert a
214non-reference into its corresponding string, number or null JSON value, 268non-reference into its corresponding string, number or null JSON value,
215which is an extension to RFC4627. Likewise, C<decode> will accept those JSON 269which is an extension to RFC4627. Likewise, C<decode> will accept those JSON
216values instead of croaking. 270values instead of croaking.
217 271
218If C<$enable> is false, then the C<encode> method will croak if it isn't 272If C<$enable> is false, then the C<encode> method will croak if it isn't
219passed an arrayref or hashref, as JSON strings must either be an object 273passed an arrayref or hashref, as JSON texts must either be an object
220or array. Likewise, C<decode> will croak if given something that is not a 274or array. Likewise, C<decode> will croak if given something that is not a
221JSON object or array. 275JSON object or array.
276
277Example, encode a Perl scalar as JSON value with enabled C<allow_nonref>,
278resulting in an invalid JSON text:
279
280 JSON::XS->new->allow_nonref->encode ("Hello, World!")
281 => "Hello, World!"
222 282
223=item $json = $json->shrink ([$enable]) 283=item $json = $json->shrink ([$enable])
224 284
225Perl usually over-allocates memory a bit when allocating space for 285Perl usually over-allocates memory a bit when allocating space for
226strings. This flag optionally resizes strings generated by either 286strings. This flag optionally resizes strings generated by either
227C<encode> or C<decode> to their minimum size possible. This can save 287C<encode> or C<decode> to their minimum size possible. This can save
228memory when your JSON strings are either very very long or you have many 288memory when your JSON texts are either very very long or you have many
229short strings. It will also try to downgrade any strings to octet-form 289short strings. It will also try to downgrade any strings to octet-form
230if possible: perl stores strings internally either in an encoding called 290if possible: perl stores strings internally either in an encoding called
231UTF-X or in octet-form. The latter cannot store everything but uses less 291UTF-X or in octet-form. The latter cannot store everything but uses less
232space in general. 292space in general.
233 293
239 299
240In the future, this setting might control other things, such as converting 300In the future, this setting might control other things, such as converting
241strings that look like integers or floats into integers or floats 301strings that look like integers or floats into integers or floats
242internally (there is no difference on the Perl level), saving space. 302internally (there is no difference on the Perl level), saving space.
243 303
244=item $json_string = $json->encode ($perl_scalar) 304=item $json_text = $json->encode ($perl_scalar)
245 305
246Converts the given Perl data structure (a simple scalar or a reference 306Converts the given Perl data structure (a simple scalar or a reference
247to a hash or array) to its JSON representation. Simple scalars will be 307to a hash or array) to its JSON representation. Simple scalars will be
248converted into JSON string or number sequences, while references to arrays 308converted into JSON string or number sequences, while references to arrays
249become JSON arrays and references to hashes become JSON objects. Undefined 309become JSON arrays and references to hashes become JSON objects. Undefined
250Perl values (e.g. C<undef>) become JSON C<null> values. Neither C<true> 310Perl values (e.g. C<undef>) become JSON C<null> values. Neither C<true>
251nor C<false> values will be generated. 311nor C<false> values will be generated.
252 312
253=item $perl_scalar = $json->decode ($json_string) 313=item $perl_scalar = $json->decode ($json_text)
254 314
255The opposite of C<encode>: expects a JSON string and tries to parse it, 315The opposite of C<encode>: expects a JSON text and tries to parse it,
256returning the resulting simple scalar or reference. Croaks on error. 316returning the resulting simple scalar or reference. Croaks on error.
257 317
258JSON numbers and strings become simple Perl scalars. JSON arrays become 318JSON numbers and strings become simple Perl scalars. JSON arrays become
259Perl arrayrefs and JSON objects become Perl hashrefs. C<true> becomes 319Perl arrayrefs and JSON objects become Perl hashrefs. C<true> becomes
260C<1>, C<false> becomes C<0> and C<null> becomes C<undef>. 320C<1>, C<false> becomes C<0> and C<null> becomes C<undef>.
321
322=back
323
324=head1 MAPPING
325
326This section describes how JSON::XS maps Perl values to JSON values and
327vice versa. These mappings are designed to "do the right thing" in most
328circumstances automatically, preserving round-tripping characteristics
329(what you put in comes out as something equivalent).
330
331For the more enlightened: note that in the following descriptions,
332lowercase I<perl> refers to the Perl interpreter, while uppcercase I<Perl>
333refers to the abstract Perl language itself.
334
335=head2 JSON -> PERL
336
337=over 4
338
339=item object
340
341A JSON object becomes a reference to a hash in Perl. No ordering of object
342keys is preserved (JSON does not preserver object key ordering itself).
343
344=item array
345
346A JSON array becomes a reference to an array in Perl.
347
348=item string
349
350A JSON string becomes a string scalar in Perl - Unicode codepoints in JSON
351are represented by the same codepoints in the Perl string, so no manual
352decoding is necessary.
353
354=item number
355
356A JSON number becomes either an integer or numeric (floating point)
357scalar in perl, depending on its range and any fractional parts. On the
358Perl level, there is no difference between those as Perl handles all the
359conversion details, but an integer may take slightly less memory and might
360represent more values exactly than (floating point) numbers.
361
362=item true, false
363
364These JSON atoms become C<0>, C<1>, respectively. Information is lost in
365this process. Future versions might represent those values differently,
366but they will be guarenteed to act like these integers would normally in
367Perl.
368
369=item null
370
371A JSON null atom becomes C<undef> in Perl.
372
373=back
374
375=head2 PERL -> JSON
376
377The mapping from Perl to JSON is slightly more difficult, as Perl is a
378truly typeless language, so we can only guess which JSON type is meant by
379a Perl value.
380
381=over 4
382
383=item hash references
384
385Perl hash references become JSON objects. As there is no inherent ordering
386in hash keys, they will usually be encoded in a pseudo-random order that
387can change between runs of the same program but stays generally the same
388within a single run of a program. JSON::XS can optionally sort the hash
389keys (determined by the I<canonical> flag), so the same datastructure
390will serialise to the same JSON text (given same settings and version of
391JSON::XS), but this incurs a runtime overhead.
392
393=item array references
394
395Perl array references become JSON arrays.
396
397=item blessed objects
398
399Blessed objects are not allowed. JSON::XS currently tries to encode their
400underlying representation (hash- or arrayref), but this behaviour might
401change in future versions.
402
403=item simple scalars
404
405Simple Perl scalars (any scalar that is not a reference) are the most
406difficult objects to encode: JSON::XS will encode undefined scalars as
407JSON null value, scalars that have last been used in a string context
408before encoding as JSON strings and anything else as number value:
409
410 # dump as number
411 to_json [2] # yields [2]
412 to_json [-3.0e17] # yields [-3e+17]
413 my $value = 5; to_json [$value] # yields [5]
414
415 # used as string, so dump as string
416 print $value;
417 to_json [$value] # yields ["5"]
418
419 # undef becomes null
420 to_json [undef] # yields [null]
421
422You can force the type to be a string by stringifying it:
423
424 my $x = 3.1; # some variable containing a number
425 "$x"; # stringified
426 $x .= ""; # another, more awkward way to stringify
427 print $x; # perl does it for you, too, quite often
428
429You can force the type to be a number by numifying it:
430
431 my $x = "3"; # some variable containing a string
432 $x += 0; # numify it, ensuring it will be dumped as a number
433 $x *= 1; # same thing, the choise is yours.
434
435You can not currently output JSON booleans or force the type in other,
436less obscure, ways. Tell me if you need this capability.
437
438=item circular data structures
439
440Those will be encoded until memory or stackspace runs out.
261 441
262=back 442=back
263 443
264=head1 COMPARISON 444=head1 COMPARISON
265 445
293 473
294Has problems handling many Perl values (e.g. regex results and other magic 474Has problems handling many Perl values (e.g. regex results and other magic
295values will make it croak). 475values will make it croak).
296 476
297Does not even generate valid JSON (C<{1,2}> gets converted to C<{1:2}> 477Does not even generate valid JSON (C<{1,2}> gets converted to C<{1:2}>
298which is not a valid JSON string. 478which is not a valid JSON text.
299 479
300Unmaintained (maintainer unresponsive for many months, bugs are not 480Unmaintained (maintainer unresponsive for many months, bugs are not
301getting fixed). 481getting fixed).
302 482
303=item JSON::Syck 0.21 483=item JSON::Syck 0.21
305Very buggy (often crashes). 485Very buggy (often crashes).
306 486
307Very inflexible (no human-readable format supported, format pretty much 487Very inflexible (no human-readable format supported, format pretty much
308undocumented. I need at least a format for easy reading by humans and a 488undocumented. I need at least a format for easy reading by humans and a
309single-line compact format for use in a protocol, and preferably a way to 489single-line compact format for use in a protocol, and preferably a way to
310generate ASCII-only JSON strings). 490generate ASCII-only JSON texts).
311 491
312Completely broken (and confusingly documented) Unicode handling (unicode 492Completely broken (and confusingly documented) Unicode handling (unicode
313escapes are not working properly, you need to set ImplicitUnicode to 493escapes are not working properly, you need to set ImplicitUnicode to
314I<different> values on en- and decoding to get symmetric behaviour). 494I<different> values on en- and decoding to get symmetric behaviour).
315 495
338 518
339Very inflexible. 519Very inflexible.
340 520
341No roundtripping. 521No roundtripping.
342 522
343Does not generate valid JSON (key strings are often unquoted, empty keys 523Does not generate valid JSON texts (key strings are often unquoted, empty keys
344result in nothing being output) 524result in nothing being output)
345 525
346Does not check input for validity. 526Does not check input for validity.
347 527
348=back 528=back
352It seems that JSON::XS is surprisingly fast, as shown in the following 532It seems that JSON::XS is surprisingly fast, as shown in the following
353tables. They have been generated with the help of the C<eg/bench> program 533tables. They have been generated with the help of the C<eg/bench> program
354in the JSON::XS distribution, to make it easy to compare on your own 534in the JSON::XS distribution, to make it easy to compare on your own
355system. 535system.
356 536
357First is a comparison between various modules using a very simple JSON 537First comes a comparison between various modules using a very short JSON
538string:
539
540 {"method": "handleMessage", "params": ["user1", "we were just talking"], "id": null}
541
358string, showing the number of encodes/decodes per second (JSON::XS is 542It shows the number of encodes/decodes per second (JSON::XS uses the
359the functional interface, while JSON::XS/2 is the OO interface with 543functional interface, while JSON::XS/2 uses the OO interface with
360pretty-printing and hashkey sorting enabled). 544pretty-printing and hashkey sorting enabled). Higher is better:
361 545
362 module | encode | decode | 546 module | encode | decode |
363 -----------|------------|------------| 547 -----------|------------|------------|
364 JSON | 14006 | 6820 | 548 JSON | 11488.516 | 7823.035 |
365 JSON::DWIW | 200937 | 120386 | 549 JSON::DWIW | 94708.054 | 129094.260 |
366 JSON::PC | 85065 | 129366 | 550 JSON::PC | 63884.157 | 128528.212 |
367 JSON::Syck | 59898 | 44232 | 551 JSON::Syck | 34898.677 | 42096.911 |
368 JSON::XS | 1171478 | 342435 | 552 JSON::XS | 654027.064 | 396423.669 |
369 JSON::XS/2 | 730760 | 328714 | 553 JSON::XS/2 | 371564.190 | 371725.613 |
370 -----------+------------+------------+ 554 -----------+------------+------------+
371 555
372That is, JSON::XS is 6 times faster than than JSON::DWIW and about 80 556That is, JSON::XS is more than six times faster than JSON::DWIW on
557encoding, more than three times faster on decoding, and about thirty times
373times faster than JSON, even with pretty-printing and key sorting. 558faster than JSON, even with pretty-printing and key sorting.
374 559
375Using a longer test string (roughly 8KB, generated from Yahoo! Locals 560Using a longer test string (roughly 18KB, generated from Yahoo! Locals
376search API (http://nanoref.com/yahooapis/mgPdGg): 561search API (http://nanoref.com/yahooapis/mgPdGg):
377 562
378 module | encode | decode | 563 module | encode | decode |
379 -----------|------------|------------| 564 -----------|------------|------------|
380 JSON | 673 | 38 | 565 JSON | 273.023 | 44.674 |
381 JSON::DWIW | 5271 | 770 | 566 JSON::DWIW | 1089.383 | 1145.704 |
382 JSON::PC | 9901 | 2491 | 567 JSON::PC | 3097.419 | 2393.921 |
383 JSON::Syck | 2360 | 786 | 568 JSON::Syck | 514.060 | 843.053 |
384 JSON::XS | 37398 | 3202 | 569 JSON::XS | 6479.668 | 3636.364 |
385 JSON::XS/2 | 13765 | 3153 | 570 JSON::XS/2 | 3774.221 | 3599.124 |
386 -----------+------------+------------+ 571 -----------+------------+------------+
387 572
388Again, JSON::XS leads by far in the encoding case, while still beating 573Again, JSON::XS leads by far.
389every other module in the decoding case.
390 574
391Last example is an almost 8MB large hash with many large binary values 575On large strings containing lots of high unicode characters, some modules
392(PNG files), resulting in a lot of escaping: 576(such as JSON::PC) seem to decode faster than JSON::XS, but the result
577will be broken due to missing (or wrong) unicode handling. Others refuse
578to decode or encode properly, so it was impossible to prepare a fair
579comparison table for that case.
580
581=head1 RESOURCE LIMITS
582
583JSON::XS does not impose any limits on the size of JSON texts or Perl
584values they represent - if your machine can handle it, JSON::XS will
585encode or decode it. Future versions might optionally impose structure
586depth and memory use resource limits.
393 587
394=head1 BUGS 588=head1 BUGS
395 589
396While the goal of this module is to be correct, that unfortunately does 590While the goal of this module is to be correct, that unfortunately does
397not mean its bug-free, only that I think its design is bug-free. It is 591not mean its bug-free, only that I think its design is bug-free. It is

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines