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.18 by root, Sat Mar 24 22:55:16 2007 UTC vs.
Revision 1.23 by root, Sun Mar 25 21:19:13 2007 UTC

4 4
5=head1 SYNOPSIS 5=head1 SYNOPSIS
6 6
7 use JSON::XS; 7 use JSON::XS;
8 8
9 # exported functions, croak on error 9 # exported functions, they croak on error
10 # and expect/generate UTF-8
10 11
11 $utf8_encoded_json_text = to_json $perl_hash_or_arrayref; 12 $utf8_encoded_json_text = to_json $perl_hash_or_arrayref;
12 $perl_hash_or_arrayref = from_json $utf8_encoded_json_text; 13 $perl_hash_or_arrayref = from_json $utf8_encoded_json_text;
13 14
15 # 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
14 # oo-interface 19 # OO-interface
15 20
16 $coder = JSON::XS->new->ascii->pretty->allow_nonref; 21 $coder = JSON::XS->new->ascii->pretty->allow_nonref;
17 $pretty_printed_unencoded = $coder->encode ($perl_scalar); 22 $pretty_printed_unencoded = $coder->encode ($perl_scalar);
18 $perl_scalar = $coder->decode ($unicode_json_text); 23 $perl_scalar = $coder->decode ($unicode_json_text);
19 24
36 41
37=head2 FEATURES 42=head2 FEATURES
38 43
39=over 4 44=over 4
40 45
41=item * correct handling of unicode issues 46=item * correct unicode handling
42 47
43This module knows how to handle Unicode, and even documents how and when 48This module knows how to handle Unicode, and even documents how and when
44it does so. 49it does so.
45 50
46=item * round-trip integrity 51=item * round-trip integrity
47 52
48When you serialise a perl data structure using only datatypes supported 53When you serialise a perl data structure using only datatypes supported
49by JSON, the deserialised data structure is identical on the Perl level. 54by JSON, the deserialised data structure is identical on the Perl level.
50(e.g. the string "2.0" doesn't suddenly become "2"). 55(e.g. the string "2.0" doesn't suddenly become "2" just because it looks
56like a number).
51 57
52=item * strict checking of JSON correctness 58=item * strict checking of JSON correctness
53 59
54There is no guessing, no generating of illegal JSON texts by default, 60There is no guessing, no generating of illegal JSON texts by default,
55and only JSON is accepted as input by default (the latter is a security 61and only JSON is accepted as input by default (the latter is a security
66interface. 72interface.
67 73
68=item * reasonably versatile output formats 74=item * reasonably versatile output formats
69 75
70You can choose between the most compact guarenteed single-line format 76You can choose between the most compact guarenteed single-line format
71possible (nice for simple line-based protocols), a pure-ascii format (for 77possible (nice for simple line-based protocols), a pure-ascii format
72when your transport is not 8-bit clean), or a pretty-printed format (for 78(for when your transport is not 8-bit clean, still supports the whole
73when you want to read that stuff). Or you can combine those features in 79unicode range), or a pretty-printed format (for when you want to read that
74whatever way you like. 80stuff). Or you can combine those features in whatever way you like.
75 81
76=back 82=back
77 83
78=cut 84=cut
79 85
80package JSON::XS; 86package JSON::XS;
81 87
88use strict;
89
82BEGIN { 90BEGIN {
83 $VERSION = '0.5'; 91 our $VERSION = '0.8';
84 @ISA = qw(Exporter); 92 our @ISA = qw(Exporter);
85 93
86 @EXPORT = qw(to_json from_json); 94 our @EXPORT = qw(to_json from_json objToJson jsonToObj);
87 require Exporter; 95 require Exporter;
88 96
89 require XSLoader; 97 require XSLoader;
90 XSLoader::load JSON::XS::, $VERSION; 98 XSLoader::load JSON::XS::, $VERSION;
91} 99}
120 $perl_scalar = JSON::XS->new->utf8->decode ($json_text) 128 $perl_scalar = JSON::XS->new->utf8->decode ($json_text)
121 129
122except being faster. 130except being faster.
123 131
124=back 132=back
133
125 134
126=head1 OBJECT-ORIENTED INTERFACE 135=head1 OBJECT-ORIENTED INTERFACE
127 136
128The object oriented interface lets you configure your own encoding or 137The object oriented interface lets you configure your own encoding or
129decoding style, within the limits of supported formats. 138decoding style, within the limits of supported formats.
293 302
294In the future, this setting might control other things, such as converting 303In the future, this setting might control other things, such as converting
295strings that look like integers or floats into integers or floats 304strings that look like integers or floats into integers or floats
296internally (there is no difference on the Perl level), saving space. 305internally (there is no difference on the Perl level), saving space.
297 306
307=item $json = $json->max_depth ([$maximum_nesting_depth])
308
309Sets the maximum nesting level (default C<8192>) accepted while encoding
310or decoding. If the JSON text or Perl data structure has an equal or
311higher nesting level then this limit, then the encoder and decoder will
312stop and croak at that point.
313
314Nesting level is defined by number of hash- or arrayrefs that the encoder
315needs to traverse to reach a given point or the number of C<{> or C<[>
316characters without their matching closing parenthesis crossed to reach a
317given character in a string.
318
319Setting the maximum depth to one disallows any nesting, so that ensures
320that the object is only a single hash/object or array.
321
322The argument to C<max_depth> will be rounded up to the next nearest power
323of two.
324
325See SECURITY CONSIDERATIONS, below, for more info on why this is useful.
326
298=item $json_text = $json->encode ($perl_scalar) 327=item $json_text = $json->encode ($perl_scalar)
299 328
300Converts the given Perl data structure (a simple scalar or a reference 329Converts the given Perl data structure (a simple scalar or a reference
301to a hash or array) to its JSON representation. Simple scalars will be 330to a hash or array) to its JSON representation. Simple scalars will be
302converted into JSON string or number sequences, while references to arrays 331converted into JSON string or number sequences, while references to arrays
312JSON numbers and strings become simple Perl scalars. JSON arrays become 341JSON numbers and strings become simple Perl scalars. JSON arrays become
313Perl arrayrefs and JSON objects become Perl hashrefs. C<true> becomes 342Perl arrayrefs and JSON objects become Perl hashrefs. C<true> becomes
314C<1>, C<false> becomes C<0> and C<null> becomes C<undef>. 343C<1>, C<false> becomes C<0> and C<null> becomes C<undef>.
315 344
316=back 345=back
346
317 347
318=head1 MAPPING 348=head1 MAPPING
319 349
320This section describes how JSON::XS maps Perl values to JSON values and 350This section describes how JSON::XS maps Perl values to JSON values and
321vice versa. These mappings are designed to "do the right thing" in most 351vice versa. These mappings are designed to "do the right thing" in most
432=item circular data structures 462=item circular data structures
433 463
434Those will be encoded until memory or stackspace runs out. 464Those will be encoded until memory or stackspace runs out.
435 465
436=back 466=back
467
437 468
438=head1 COMPARISON 469=head1 COMPARISON
439 470
440As already mentioned, this module was created because none of the existing 471As already mentioned, this module was created because none of the existing
441JSON modules could be made to work correctly. First I will describe the 472JSON modules could be made to work correctly. First I will describe the
570(such as JSON::PC) seem to decode faster than JSON::XS, but the result 601(such as JSON::PC) seem to decode faster than JSON::XS, but the result
571will be broken due to missing (or wrong) unicode handling. Others refuse 602will be broken due to missing (or wrong) unicode handling. Others refuse
572to decode or encode properly, so it was impossible to prepare a fair 603to decode or encode properly, so it was impossible to prepare a fair
573comparison table for that case. 604comparison table for that case.
574 605
575=head1 RESOURCE LIMITS
576 606
577JSON::XS does not impose any limits on the size of JSON texts or Perl 607=head1 SECURITY CONSIDERATIONS
578values they represent - if your machine can handle it, JSON::XS will 608
579encode or decode it. Future versions might optionally impose structure 609When you are using JSON in a protocol, talking to untrusted potentially
580depth and memory use resource limits. 610hostile creatures requires relatively few measures.
611
612First of all, your JSON decoder should be secure, that is, should not have
613any buffer overflows. Obviously, this module should ensure that and I am
614trying hard on making that true, but you never know.
615
616Second, you need to avoid resource-starving attacks. That means you should
617limit the size of JSON texts you accept, or make sure then when your
618resources run out, thats just fine (e.g. by using a separate process that
619can crash safely). The size of a JSON text in octets or characters is
620usually a good indication of the size of the resources required to decode
621it into a Perl structure.
622
623Third, JSON::XS recurses using the C stack when decoding objects and
624arrays. The C stack is a limited resource: for instance, on my amd64
625machine with 8MB of stack size I can decode around 180k nested arrays
626but only 14k nested JSON objects. If that is exceeded, the program
627crashes. Thats why the default nesting limit is set to 8192. If your
628process has a smaller stack, you should adjust this setting accordingly
629with the C<max_depth> method.
630
631And last but least, something else could bomb you that I forgot to think
632of. In that case, you get to keep the pieces. I am alway sopen for hints,
633though...
634
581 635
582=head1 BUGS 636=head1 BUGS
583 637
584While the goal of this module is to be correct, that unfortunately does 638While the goal of this module is to be correct, that unfortunately does
585not mean its bug-free, only that I think its design is bug-free. It is 639not mean its bug-free, only that I think its design is bug-free. It is
586still very young and not well-tested. If you keep reporting bugs they will 640still relatively early in its development. If you keep reporting bugs they
587be fixed swiftly, though. 641will be fixed swiftly, though.
588 642
589=cut 643=cut
590 644
5911; 6451;
592 646

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines