How to JSON encode a hash?
10,137
Solution 1
And the JSON builtin sort does not enough?
see: http://metacpan.org/pod/JSON#sort_by
Sorting is supported only with JSON:PP (Perl, not XS - AFAIK)
so:
use JSON::PP;
use warnings;
use strict;
my $data = {
'aaa' => {
a => 1,
b => 2,
},
'bbb' => {
x => 3,
},
'a2' => {
z => 4,
}
};
my $json = JSON::PP->new->allow_nonref;
#my $js = $json->encode($data); #without sort
my $js = $json->sort_by(sub { $JSON::PP::a cmp $JSON::PP::b })->encode($data);
print "$js\n";
Solution 2
Oldish post but anyone looking for sorting json output..
#!/bin/perl
use warnings;
use strict;
use Sort::Naturally;
use JSON;
my $data = {
'a10' => {
b => 1,
a => 2,
},
'bbb' => {
x => 3,
},
'a2' => {
z => 4,
}
};
my $json = new JSON;
$json->sort_by(sub { ncmp($JSON::PP::a, $JSON::PP::b) });
my $json_text = $json->pretty->encode ($data);
print $json_text;
{
"a2" : {
"z" : 4
},
"a10" : {
"a" : 2,
"b" : 1
},
"bbb" : {
"x" : 3
}
}
Author by
Sandra Schlichting
Updated on June 28, 2022Comments
-
Sandra Schlichting almost 2 years
I would like to iterate over a hash on the server-side, and send it over to the client in the sorted order using JSON.
My question is:
When I am in my
foreach
-loop and have the key and complex value (see how my hash looks like at the bottom), how do I insert it in to the JSON string?Here is how I do that
use JSON; my $json = JSON->new; $json = $json->utf8; ... # use numeric sort foreach my $key (sort {$a <=> $b} (keys %act)) { # somehow insert $key and contents of $act{$key} into JSON here } # my $json_string; # my $data = $json->encode(%h); # $json_string = to_json($data); # # return JSON string # print $cgi->header(-type => "application/json", -charset => "utf-8"); # print $json_string;
print Dumper \%act
looks like this$VAR1 = { '127' => { 'owners' => [ 'm' ], 'users' => [ 'hh', 'do' ], 'date_end' => '24/05-2011', 'title' => 'dfg', 'date_begin' => '24/05-2011', 'members_groups' => [], 'type' => 'individuel' }, '276' => { ...
-
Sandra Schlichting almost 13 yearsIt is very likely. I don't quite understand the example
$js = $pc->sort_by(sub { $JSON::PP::a cmp $JSON::PP::b })->encode($obj);
What is$pc
? I suppose$JSON
is$json
in my case? -
Sandra Schlichting almost 13 years
$JSON::PP::a cmp $JSON::PP::b
gives string sort. Ie. 100 comes before 44. Is numerical sort possible, so 44 comes before 100? -
Jason over 8 yearsWhy the -1? No comment?