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.20 by root, Sun Mar 25 00:47:42 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
82use strict; 88use strict;
83 89
84BEGIN { 90BEGIN {
85 our $VERSION = '0.7'; 91 our $VERSION = '0.8';
86 our @ISA = qw(Exporter); 92 our @ISA = qw(Exporter);
87 93
88 our @EXPORT = qw(to_json from_json); 94 our @EXPORT = qw(to_json from_json objToJson jsonToObj);
89 require Exporter; 95 require Exporter;
90 96
91 require XSLoader; 97 require XSLoader;
92 XSLoader::load JSON::XS::, $VERSION; 98 XSLoader::load JSON::XS::, $VERSION;
93} 99}
122 $perl_scalar = JSON::XS->new->utf8->decode ($json_text) 128 $perl_scalar = JSON::XS->new->utf8->decode ($json_text)
123 129
124except being faster. 130except being faster.
125 131
126=back 132=back
133
127 134
128=head1 OBJECT-ORIENTED INTERFACE 135=head1 OBJECT-ORIENTED INTERFACE
129 136
130The object oriented interface lets you configure your own encoding or 137The object oriented interface lets you configure your own encoding or
131decoding style, within the limits of supported formats. 138decoding style, within the limits of supported formats.
295 302
296In the future, this setting might control other things, such as converting 303In the future, this setting might control other things, such as converting
297strings that look like integers or floats into integers or floats 304strings that look like integers or floats into integers or floats
298internally (there is no difference on the Perl level), saving space. 305internally (there is no difference on the Perl level), saving space.
299 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
300=item $json_text = $json->encode ($perl_scalar) 327=item $json_text = $json->encode ($perl_scalar)
301 328
302Converts the given Perl data structure (a simple scalar or a reference 329Converts the given Perl data structure (a simple scalar or a reference
303to 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
304converted into JSON string or number sequences, while references to arrays 331converted into JSON string or number sequences, while references to arrays
314JSON numbers and strings become simple Perl scalars. JSON arrays become 341JSON numbers and strings become simple Perl scalars. JSON arrays become
315Perl arrayrefs and JSON objects become Perl hashrefs. C<true> becomes 342Perl arrayrefs and JSON objects become Perl hashrefs. C<true> becomes
316C<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>.
317 344
318=back 345=back
346
319 347
320=head1 MAPPING 348=head1 MAPPING
321 349
322This 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
323vice 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
434=item circular data structures 462=item circular data structures
435 463
436Those will be encoded until memory or stackspace runs out. 464Those will be encoded until memory or stackspace runs out.
437 465
438=back 466=back
467
439 468
440=head1 COMPARISON 469=head1 COMPARISON
441 470
442As already mentioned, this module was created because none of the existing 471As already mentioned, this module was created because none of the existing
443JSON 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
572(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
573will be broken due to missing (or wrong) unicode handling. Others refuse 602will be broken due to missing (or wrong) unicode handling. Others refuse
574to 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
575comparison table for that case. 604comparison table for that case.
576 605
577=head1 RESOURCE LIMITS
578 606
579JSON::XS does not impose any limits on the size of JSON texts or Perl 607=head1 SECURITY CONSIDERATIONS
580values they represent - if your machine can handle it, JSON::XS will 608
581encode or decode it. Future versions might optionally impose structure 609When you are using JSON in a protocol, talking to untrusted potentially
582depth 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
583 635
584=head1 BUGS 636=head1 BUGS
585 637
586While 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
587not 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
588still 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
589be fixed swiftly, though. 641will be fixed swiftly, though.
590 642
591=cut 643=cut
592 644
5931; 6451;
594 646

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines