summaryrefslogtreecommitdiffstats
path: root/qooxdoo/source/perl/JSON.pm
diff options
context:
space:
mode:
Diffstat (limited to 'qooxdoo/source/perl/JSON.pm')
-rwxr-xr-xqooxdoo/source/perl/JSON.pm725
1 files changed, 0 insertions, 725 deletions
diff --git a/qooxdoo/source/perl/JSON.pm b/qooxdoo/source/perl/JSON.pm
deleted file mode 100755
index 59686e0..0000000
--- a/qooxdoo/source/perl/JSON.pm
+++ /dev/null
@@ -1,725 +0,0 @@
-package JSON;
-
-use strict;
-use base qw(Exporter);
-
-@JSON::EXPORT = qw(objToJson jsonToObj);
-
-use vars qw($AUTOCONVERT $VERSION $UnMapping $BareKey $QuotApos
- $ExecCoderef $SkipInvalid $Pretty $Indent $Delimiter
- $KeySort $ConvBlessed $SelfConvert $UTF8 $SingleQuote);
-
-$VERSION = '1.14';
-
-$AUTOCONVERT = 1;
-$SkipInvalid = 0;
-$ExecCoderef = 0;
-$Pretty = 0; # pretty-print mode switch
-$Indent = 2; # (for pretty-print)
-$Delimiter = 2; # (for pretty-print) 0 => ':', 1 => ': ', 2 => ' : '
-$UnMapping = 0; #
-$BareKey = 0; #
-$QuotApos = 0; #
-$KeySort = undef; # Code-ref to provide sort ordering in converter
-$UTF8 = 0;
-$SingleQuote = 0;
-
-my $USE_UTF8;
-
-BEGIN {
- $USE_UTF8 = $] >= 5.008 ? 1 : 0;
- sub USE_UTF8 { $USE_UTF8; }
-}
-
-use JSON::Parser;
-use JSON::Converter;
-
-my $parser; # JSON => Perl
-my $conv; # Perl => JSON
-
-
-##############################################################################
-# CONSTRCUTOR - JSON objects delegate all processes
-# to JSON::Converter and JSON::Parser.
-##############################################################################
-
-sub new {
- my $class = shift;
- my %opt = @_;
- bless {
- conv => undef, # JSON::Converter [perl => json]
- parser => undef, # JSON::Parser [json => perl]
- # below fields are for JSON::Converter
- autoconv => $AUTOCONVERT,
- skipinvalid => $SkipInvalid,
- execcoderef => $ExecCoderef,
- pretty => $Pretty ,
- indent => $Indent ,
- delimiter => $Delimiter ,
- keysort => $KeySort ,
- convblessed => $ConvBlessed,
- selfconvert => $SelfConvert,
- singlequote => $SingleQuote,
- # below fields are for JSON::Parser
- unmapping => $UnMapping,
- quotapos => $QuotApos ,
- barekey => $BareKey ,
- # common options
- utf8 => $UTF8 ,
- # overwrite
- %opt,
- }, $class;
-}
-
-
-##############################################################################
-# METHODS
-##############################################################################
-
-*parse_json = \&jsonToObj;
-
-*to_json = \&objToJson;
-
-sub jsonToObj {
- my $self = shift;
- my $js = shift;
-
- if(!ref($self)){ # class method
- my $opt = __PACKAGE__->_getParamsForParser($js);
- $js = $self;
- $parser ||= new JSON::Parser;
- $parser->jsonToObj($js, $opt);
- }
- else{ # instance method
- my $opt = $self->_getParamsForParser($_[0]);
- $self->{parser} ||= ($parser ||= JSON::Parser->new);
- $self->{parser}->jsonToObj($js, $opt);
- }
-}
-
-
-sub objToJson {
- my $self = shift || return;
- my $obj = shift;
-
- if(ref($self) !~ /JSON/){ # class method
- my $opt = __PACKAGE__->_getParamsForConverter($obj);
- $obj = $self;
- $conv ||= JSON::Converter->new();
- $conv->objToJson($obj, $opt);
- }
- else{ # instance method
- my $opt = $self->_getParamsForConverter($_[0]);
- $self->{conv}
- ||= JSON::Converter->new( %$opt );
- $self->{conv}->objToJson($obj, $opt);
- }
-}
-
-
-#######################
-
-
-sub _getParamsForParser {
- my ($self, $opt) = @_;
- my $params;
-
- if(ref($self)){ # instance
- my @names = qw(unmapping quotapos barekey utf8);
- my ($unmapping, $quotapos, $barekey, $utf8) = @{$self}{ @names };
- $params = {
- unmapping => $unmapping, quotapos => $quotapos,
- barekey => $barekey, utf8 => $utf8,
- };
- }
- else{ # class
- $params = {
- unmapping => $UnMapping, barekey => $BareKey,
- quotapos => $QuotApos, utf8 => $UTF8,
- };
- }
-
- if($opt and ref($opt) eq 'HASH'){
- for my $key ( keys %$opt ){
- $params->{$key} = $opt->{$key};
- }
- }
-
- return $params;
-}
-
-
-sub _getParamsForConverter {
- my ($self, $opt) = @_;
- my $params;
-
- if(ref($self)){ # instance
- my @names
- = qw(pretty indent delimiter autoconv keysort convblessed selfconvert utf8 singlequote);
- my ($pretty, $indent, $delimiter, $autoconv,
- $keysort, $convblessed, $selfconvert, $utf8, $singlequote)
- = @{$self}{ @names };
- $params = {
- pretty => $pretty, indent => $indent,
- delimiter => $delimiter, autoconv => $autoconv,
- keysort => $keysort, convblessed => $convblessed,
- selfconvert => $selfconvert, utf8 => $utf8,
- singlequote => $singlequote,
- };
- }
- else{ # class
- $params = {
- pretty => $Pretty, indent => $Indent,
- delimiter => $Delimiter, autoconv => $AUTOCONVERT,
- keysort => $KeySort, convblessed => $ConvBlessed,
- selfconvert => $SelfConvert, utf8 => $UTF8,
- singlequote => $SingleQuote,
- };
- }
-
- if($opt and ref($opt) eq 'HASH'){
- for my $key ( keys %$opt ){
- $params->{$key} = $opt->{$key};
- }
- }
-
- return $params;
-}
-
-##############################################################################
-# ACCESSOR
-##############################################################################
-BEGIN{
- for my $name (qw/autoconv pretty indent delimiter
- unmapping keysort convblessed selfconvert singlequote/)
- {
- eval qq{
- sub $name { \$_[0]->{$name} = \$_[1] if(defined \$_[1]); \$_[0]->{$name} }
- };
- }
-}
-
-##############################################################################
-# NON STRING DATA
-##############################################################################
-
-# See JSON::Parser for JSON::NotString.
-
-sub Number {
- my $num = shift;
-
- return undef if(!defined $num);
-
- if( $num =~ /^-?(?:\d+)(?:\.\d*)?(?:[eE][-+]?\d+)?$/
- or $num =~ /^0[xX](?:[0-9a-zA-Z])+$/ )
- {
- return bless {value => $num}, 'JSON::NotString';
- }
- else{
- return undef;
- }
-}
-
-sub True {
- bless {value => 'true'}, 'JSON::NotString';
-}
-
-sub False {
- bless {value => 'false'}, 'JSON::NotString';
-}
-
-sub Null {
- bless {value => undef}, 'JSON::NotString';
-}
-
-##############################################################################
-1;
-__END__
-
-=pod
-
-=head1 NAME
-
-JSON - parse and convert to JSON (JavaScript Object Notation).
-
-=head1 SYNOPSIS
-
- use JSON;
-
- $obj = {
- id => ["foo", "bar", { aa => 'bb'}],
- hoge => 'boge'
- };
-
- $js = objToJson($obj);
- # this is {"id":["foo","bar",{"aa":"bb"}],"hoge":"boge"}.
- $obj = jsonToObj($js);
- # the data structure was restored.
-
- # OOP
-
- my $json = new JSON;
-
- $obj = {id => 'foo', method => 'echo', params => ['a','b']};
- $js = $json->objToJson($obj);
- $obj = $json->jsonToObj($js);
-
- # pretty-printing
- $js = $json->objToJson($obj, {pretty => 1, indent => 2});
-
- $json = JSON->new(pretty => 1, delimiter => 0);
- $json->objToJson($obj);
-
-
-=head1 TRANSITION PLAN
-
-In the next large update version, JSON and JSONRPC modules are split.
-
- JSON::Parser and JSON::Converter are deleted from JSON dist.
- JSON and JSON::PP in JSON dist.
-
- JSON becomes wrapper to JSON::XS and/or JSON::PP.
-
- JSONRPC* and Apache::JSONRPC are deleted from JSON dist.
- JSONRPC::Client, JSONRPC::Server and JSONRPC::Procedure in JSON::RPC dist.
-
- Modules in JSON::RPC dist supports JSONRPC protocol v1.1 and 1.0.
-
-
-=head1 DESCRIPTION
-
-This module converts between JSON (JavaScript Object Notation) and Perl
-data structure into each other.
-For JSON, See to http://www.crockford.com/JSON/.
-
-
-=head1 METHODS
-
-=over 4
-
-=item new()
-
-=item new( %options )
-
-returns a JSON object. The object delegates the converting and parsing process
-to L<JSON::Converter> and L<JSON::Parser>.
-
- my $json = new JSON;
-
-C<new> can take some options.
-
- my $json = new JSON (autoconv => 0, pretty => 1);
-
-Following options are supported:
-
-=over 4
-
-=item autoconv
-
-See L</AUTOCONVERT> for more info.
-
-=item skipinvalid
-
-C<objToJson()> does C<die()> when it encounters any invalid data
-(for instance, coderefs). If C<skipinvalid> is set with true,
-the function convets these invalid data into JSON format's C<null>.
-
-=item execcoderef
-
-C<objToJson()> does C<die()> when it encounters any code reference.
-However, if C<execcoderef> is set with true, executes the coderef
-and uses returned value.
-
-=item pretty
-
-See L</PRETTY PRINTING> for more info.
-
-=item indent
-
-See L</PRETTY PRINTING> for more info.
-
-=item delimiter
-
-See L</PRETTY PRINTING> for more info.
-
-=item keysort
-
-See L</HASH KEY SORT ORDER> for more info.
-
-=item convblessed
-
-See L</BLESSED OBJECT> for more info.
-
-=item selfconvert
-
-See L</BLESSED OBJECT> for more info.
-
-=item singlequote
-
-See L</CONVERT WITH SINGLE QUOTES> for more info.
-
-=back
-
-
-=item objToJson( $object )
-
-=item objToJson( $object, $hashref )
-
-takes perl data structure (basically, they are scalars, arrayrefs and hashrefs)
-and returns JSON formated string.
-
- my $obj = [1, 2, {foo => bar}];
- my $js = $json->objToJson($obj);
- # [1,2,{"foo":"bar"}]
-
-By default, returned string is one-line. However, you can get pretty-printed
-data with C<pretty> option. Please see below L</PRETTY PRINTING>.
-
- my $js = $json->objToJson($obj, {pretty => 1, indent => 2});
- # [
- # 1,
- # 2,
- # {
- # "foo" : "bar"
- # }
- # ]
-
-=item jsonToObj( $js )
-
-takes a JSON formated data and returns a perl data structure.
-
-
-=item autoconv()
-
-=item autoconv($bool)
-
-This is an accessor to C<autoconv>. See L</AUTOCONVERT> for more info.
-
-=item pretty()
-
-=item pretty($bool)
-
-This is an accessor to C<pretty>. It takes true or false.
-When prrety is true, C<objToJson()> returns prrety-printed string.
-See L</PRETTY PRINTING> for more info.
-
-=item indent()
-
-=item indent($integer)
-
-This is an accessor to C<indent>.
-See L</PRETTY PRINTING> for more info.
-
-=item delimiter()
-
-This is an accessor to C<delimiter>.
-See L</PRETTY PRINTING> for more info.
-
-=item unmapping()
-
-=item unmapping($bool)
-
-This is an accessor to C<unmapping>.
-See L</UNMAPPING OPTION> for more info.
-
-=item keysort()
-
-=item keysort($coderef)
-
-This is an accessor to C<keysort>.
-See L</HASH KEY SORT ORDER> for more info.
-
-=item convblessed()
-
-=item convblessed($bool)
-
-This is an accessor to C<convblessed>.
-See L</BLESSED OBJECT> for more info.
-
-=item selfconvert()
-
-=item selfconvert($bool)
-
-This is an accessor to C<selfconvert>.
-See L</BLESSED OBJECT> for more info.
-
-=item singlequote()
-
-=item singlequote($bool)
-
-This is an accessor to C<singlequote>.
-See L</CONVERT WITH SINGLE QUOTES> for more info.
-
-
-=back
-
-=head1 MAPPING
-
- (JSON) {"param" : []}
- ( => Perl) {'param' => []};
-
- (JSON) {"param" : {}}
- ( => Perl) {'param' => {}};
-
- (JSON) {"param" : "string"}
- ( => Perl) {'param' => 'string'};
-
- JSON {"param" : null}
- => Perl {'param' => bless( {'value' => undef}, 'JSON::NotString' )};
- or {'param' => undef}
-
- (JSON) {"param" : true}
- ( => Perl) {'param' => bless( {'value' => 'true'}, 'JSON::NotString' )};
- or {'param' => 1}
-
- (JSON) {"param" : false}
- ( => Perl) {'param' => bless( {'value' => 'false'}, 'JSON::NotString' )};
- or {'param' => 2}
-
- (JSON) {"param" : 0xff}
- ( => Perl) {'param' => 255};
-
- (JSON) {"param" : 010}
- ( => Perl) {'param' => 8};
-
-These JSON::NotString objects are overloaded so you don't care about.
-Since 1.00, L</UnMapping option> is added. When that option is set,
-{"param" : null} will be converted into {'param' => undef}, insted of
-{'param' => bless( {'value' => undef}, 'JSON::NotString' )}.
-
-
-Perl's C<undef> is converted to 'null'.
-
-
-=head1 PRETTY PRINTING
-
-If you'd like your JSON output to be pretty-printed, pass the C<pretty>
-parameter to objToJson(). You can affect the indentation (which defaults to 2)
-by passing the C<indent> parameter to objToJson().
-
- my $str = $json->objToJson($obj, {pretty => 1, indent => 4});
-
-In addition, you can set some number to C<delimiter> option.
-The available numbers are only 0, 1 and 2.
-In pretty-printing mode, when C<delimiter> is 1, one space is added
-after ':' in object keys. If C<delimiter> is 2, it is ' : ' and
-0 is ':' (default is 2). If you give 3 or more to it, the value
-is taken as 2.
-
-
-=head1 AUTOCONVERT
-
-By default, $JSON::AUTOCONVERT is true.
-
- (Perl) {num => 10.02}
- ( => JSON) {"num" : 10.02}
-
-it is not C<{"num" : "10.02"}>.
-
-But set false value with $JSON::AUTOCONVERT:
-
- (Perl) {num => 10.02}
- ( => JSON) {"num" : "10.02"}
-
-it is not C<{"num" : 10.02}>.
-
-You can explicitly sepcify:
-
- $obj = {
- id => JSON::Number(10.02),
- bool1 => JSON::True,
- bool2 => JSON::False,
- noval => JSON::Null,
- };
-
- $json->objToJson($obj);
- # {"noval" : null, "bool2" : false, "bool1" : true, "id" : 10.02}
-
-C<JSON::Number()> returns C<undef> when an argument invalid format.
-
-=head1 UNMAPPING OPTION
-
-By default, $JSON::UnMapping is false and JSON::Parser converts
-C<null>, C<true>, C<false> into C<JSON::NotString> objects.
-You can set true into $JSON::UnMapping to stop the mapping function.
-In that case, JSON::Parser will convert C<null>, C<true>, C<false>
-into C<undef>, 1, 0.
-
-=head1 BARE KEY OPTION
-
-You can set a true value into $JSON::BareKey for JSON::Parser to parse
-bare keys of objects.
-
- local $JSON::BareKey = 1;
- $obj = jsonToObj('{foo:"bar"}');
-
-=head1 SINGLE QUOTATION OPTION
-
-You can set a true value into $JSON::QuotApos for JSON::Parser to parse
-any keys and values quoted by single quotations.
-
- local $JSON::QuotApos = 1;
- $obj = jsonToObj(q|{"foo":'bar'}|);
- $obj = jsonToObj(q|{'foo':'bar'}|);
-
-With $JSON::BareKey:
-
- local $JSON::BareKey = 1;
- local $JSON::QuotApos = 1;
- $obj = jsonToObj(q|{foo:'bar'}|);
-
-=head1 HASH KEY SORT ORDER
-
-By default objToJSON will serialize hashes with their keys in random
-order. To control the ordering of hash keys, you can provide a standard
-'sort' function that will be used to control how hashes are converted.
-
-You can provide either a fully qualified function name or a CODEREF to
-$JSON::KeySort or $obj->keysort.
-
-If you give any integers (excluded 0), the sort function will work as:
-
- sub { $a cmp $b }
-
-Note that since the sort function is external to the JSON module the
-magical $a and $b arguments will not be in the same package. In order
-to gain access to the sorting arguments, you must either:
-
- o use the ($$) prototype (slow)
- o Fully qualify $a and $b from the JSON::Converter namespace
-
-See the documentation on sort for more information.
-
- local $JSON::KeySort = 'My::Package::sort_function';
-
- or
-
- local $JSON::KeySort = \&_some_function;
-
- sub sort_function {
- $JSON::Converter::a cmp $JSON::Converter::b;
- }
-
- or
-
- sub sort_function ($$) {
- my ($a, $b) = @_;
-
- $a cmp $b
- }
-
-=head1 BLESSED OBJECT
-
-By default, JSON::Converter doesn't deal with any blessed object
-(returns C<undef> or C<null> in the JSON format).
-If you use $JSON::ConvBlessed or C<convblessed> option,
-the module can convert most blessed object (hashref or arrayref).
-
- local $JSON::ConvBlessed = 1;
- print objToJson($blessed);
-
-This option slows down the converting speed.
-
-If you use $JSON::SelfConvert or C<selfconvert> option,
-the module will test for a C<toJson()> method on the object,
-and will rely on this method to obtain the converted value of
-the object.
-
-=head1 UTF8
-
-You can set a true value into $JSON::UTF8 for JSON::Parser
-and JSON::Converter to set UTF8 flag into strings contain utf8.
-
-
-=head1 CONVERT WITH SINGLE QUOTES
-
-You can set a true value into $JSON::SingleQuote for JSON::Converter
-to quote any keys and values with single quotations.
-
-You want to parse single quoted JSON data, See L</SINGLE QUOTATION OPTION>.
-
-
-=head1 EXPORT
-
-C<objToJson>, C<jsonToObj>.
-
-=head1 TODO
-
-Which name is more desirable? JSONRPC or JSON::RPC.
-
-SingleQuote and QuotApos...
-
-
-=head1 SEE ALSO
-
-L<http://www.crockford.com/JSON/>, L<JSON::Parser>, L<JSON::Converter>
-
-If you want the speed and the saving of memory usage,
-check L<JSON::Syck>.
-
-=head1 ACKNOWLEDGEMENTS
-
-I owe most JSONRPC idea to L<XMLRPC::Lite> and L<SOAP::Lite>.
-
-SHIMADA pointed out many problems to me.
-
-Mike Castle E<lt>dalgoda[at]ix.netcom.comE<gt> suggested
-better packaging way.
-
-Jeremy Muhlich E<lt>jmuhlich[at]bitflood.orgE<gt> help me
-escaped character handling in JSON::Parser.
-
-Adam Sussman E<lt>adam.sussman[at]ticketmaster.comE<gt>
-suggested the octal and hexadecimal formats as number.
-Sussman also sent the 'key sort' and 'hex number autoconv' patch
-and 'HASH KEY SORT ORDER' section.
-
-Tatsuhiko Miyagawa E<lt>miyagawa[at]bulknews.netE<gt>
-taught a terrible typo and gave some suggestions.
-
-David Wheeler E<lt>david[at]kineticode.comE<gt>
-suggested me supporting pretty-printing and
-gave a part of L<PRETTY PRINTING>.
-
-Rusty Phillips E<lt>rphillips[at]edats.comE<gt>
-suggested me supporting the query object other than CGI.pm
-for JSONRPC::Transport::HTTP::CGI.
-
-Felipe Gasper E<lt>gasperfm[at]uc.eduE<gt>
-pointed to a problem of JSON::NotString with undef.
-And show me patches for 'bare key option' & 'single quotation option'.
-
-Yaman Saqqa E<lt>abulyomon[at]gmail.comE<gt>
-helped my decision to support the bare key option.
-
-Alden DoRosario E<lt>adorosario[at]chitika.comE<gt>
-tought JSON::Conveter::_stringfy (<= 0.992) is very slow.
-
-Brad Baxter sent to 'key sort' patch and thought a bug in JSON.
-
-Jacob and Jay Buffington sent 'blessed object conversion' patch.
-
-Thanks to Peter Edwards, IVAN, and all testers for bug reports.
-
-Yann Kerherve sent 'selfconverter' patch(code, document and test).
-
-Annocpan users comment on JSON pod. See http://annocpan.org/pod/JSON
-
-And Thanks very much to JSON by JSON.org (Douglas Crockford) and
-JSON-RPC by http://json-rpc.org/
-
-
-=head1 AUTHOR
-
-Makamaka Hannyaharamitu, E<lt>makamaka[at]cpan.orgE<gt>
-
-=head1 COPYRIGHT AND LICENSE
-
-Copyright 2005-2007 by Makamaka Hannyaharamitu
-
-This library is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
-
-