This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
a0d245c1041379a0a05c74a3f159bc4b10bfcc07
[perl5.git] / cpan / JSON-PP / bin / json_pp
1 #!/usr/bin/perl
2
3 BEGIN { pop @INC if $INC[-1] eq '.' }
4 use strict;
5 use Getopt::Long;
6
7 use JSON::PP ();
8
9 # imported from JSON-XS/bin/json_xs
10
11 my %allow_json_opt = map { $_ => 1 } qw(
12     ascii latin1 utf8 pretty indent space_before space_after relaxed canonical allow_nonref
13     allow_singlequote allow_barekey allow_bignum loose escape_slash
14 );
15
16
17 GetOptions(
18    'v'   => \( my $opt_verbose ),
19    'f=s' => \( my $opt_from = 'json' ),
20    't=s' => \( my $opt_to = 'json' ),
21    'json_opt=s' => \( my $json_opt = 'pretty' ),
22    'V'   => \( my $version ),
23 ) or die "Usage: $0 [-V] [-f from_format] [-t to_format] [-json_opt options]\n";
24
25
26 if ( $version ) {
27     print "$JSON::PP::VERSION\n";
28     exit;
29 }
30
31
32 $json_opt = '' if $json_opt eq '-';
33
34 my @json_opt = grep { $allow_json_opt{ $_ } or die "'$_' is not a valid json option" } split/,/, $json_opt;
35
36 my %F = (
37    'json' => sub {
38       my $json = JSON::PP->new;
39       $json->$_() for @json_opt;
40       $json->decode( $_ );
41    },
42    'eval' => sub {
43         my $v = eval "no strict;\n#line 1 \"input\"\n$_";
44         die "$@" if $@;
45         return $v;
46     },
47 );
48
49
50 my %T = (
51    'null' => sub { "" },
52    'json' => sub {
53       my $json = JSON::PP->new->utf8;
54       $json->$_() for @json_opt;
55       $json->encode( $_ );
56    },
57    'dumper' => sub {
58       require Data::Dumper;
59       local $Data::Dumper::Terse     = 1;
60       local $Data::Dumper::Indent    = 1;
61       local $Data::Dumper::Useqq     = 1;
62       local $Data::Dumper::Quotekeys = 0;
63       local $Data::Dumper::Sortkeys  = 1;
64       Data::Dumper::Dumper($_)
65    },
66 );
67
68
69
70 $F{$opt_from}
71    or die "$opt_from: not a valid fromformat\n";
72
73 $T{$opt_to}
74    or die "$opt_from: not a valid toformat\n";
75
76 local $/;
77 $_ = <STDIN>;
78
79 $_ = $F{$opt_from}->();
80 $_ = $T{$opt_to}->();
81
82 print $_;
83
84
85 __END__
86
87 =pod
88
89 =encoding utf8
90
91 =head1 NAME
92
93 json_pp - JSON::PP command utility
94
95 =head1 SYNOPSIS
96
97     json_pp [-v] [-f from_format] [-t to_format] [-json_opt options_to_json]
98
99 =head1 DESCRIPTION
100
101 json_pp converts between some input and output formats (one of them is JSON).
102 This program was copied from L<json_xs> and modified.
103
104 The default input format is json and the default output format is json with pretty option.
105
106 =head1 OPTIONS
107
108 =head2 -f
109
110     -f from_format
111
112 Reads a data in the given format from STDIN.
113
114 Format types:
115
116 =over
117
118 =item json
119
120 as JSON
121
122 =item eval
123
124 as Perl code
125
126 =back
127
128 =head2 -t
129
130 Writes a data in the given format to STDOUT.
131
132 =over
133
134 =item null
135
136 no action.
137
138 =item json
139
140 as JSON
141
142 =item dumper
143
144 as Data::Dumper
145
146 =back
147
148 =head2 -json_opt
149
150 options to JSON::PP
151
152 Acceptable options are:
153
154     ascii latin1 utf8 pretty indent space_before space_after relaxed canonical allow_nonref
155     allow_singlequote allow_barekey allow_bignum loose escape_slash
156
157 =head2 -v
158
159 Verbose option, but currently no action in fact.
160
161 =head2 -V
162
163 Prints version and exits.
164
165
166 =head1 EXAMPLES
167
168     $ perl -e'print q|{"foo":"あい","bar":1234567890000000000000000}|' |\
169        json_pp -f json -t dumper -json_opt pretty,utf8,allow_bignum
170     
171     $VAR1 = {
172               'bar' => bless( {
173                                 'value' => [
174                                              '0000000',
175                                              '0000000',
176                                              '5678900',
177                                              '1234'
178                                            ],
179                                 'sign' => '+'
180                               }, 'Math::BigInt' ),
181               'foo' => "\x{3042}\x{3044}"
182             };
183
184     $ perl -e'print q|{"foo":"あい","bar":1234567890000000000000000}|' |\
185        json_pp -f json -t dumper -json_opt pretty
186     
187     $VAR1 = {
188               'bar' => '1234567890000000000000000',
189               'foo' => "\x{e3}\x{81}\x{82}\x{e3}\x{81}\x{84}"
190             };
191
192 =head1 SEE ALSO
193
194 L<JSON::PP>, L<json_xs>
195
196 =head1 AUTHOR
197
198 Makamaka Hannyaharamitu, E<lt>makamaka[at]cpan.orgE<gt>
199
200
201 =head1 COPYRIGHT AND LICENSE
202
203 Copyright 2010 by Makamaka Hannyaharamitu
204
205 This library is free software; you can redistribute it and/or modify
206 it under the same terms as Perl itself. 
207
208 =cut
209