基于this的帖子,我想了解sort_by
如何在JSON::PP
中工作。sort_by函数如何工作?
当运行该代码
#!/usr/bin/perl
use strict;
use warnings;
use JSON::PP;
use Data::Dumper qw(Dumper);
my $h = {
22 => { title => "c", name => "d" },
1 => { title => "1", name => "a" },
10 => { title => "a", name => "c" },
5 => { title => "b", name => "b" },
};
my $sorter = sub {
# See what's going on.
print "$JSON::PP::a cmp $JSON::PP::b\n";
print Dumper(\@_, $_);
<STDIN>; # press return to continue
$JSON::PP::a cmp $JSON::PP::b
};
my $js = JSON::PP->new;
my $output = $js->sort_by($sorter)->encode($h);
print $output . "\n";
它第一排序的内密钥,然后将外键,其确定在JSON字符串的最后顺序。
现在它输出
{"1":{"name":"a","title":"1"},"10":{"name":"c","title":"a"},"22":{"name":"d","title":"c"},"5":{"name":"b","title":"b"}}
什么,我想直到结束的是,它是由title
即排序。
{"1":{"name":"a","title":"1"},"5":{"name":"b","title":"b"}"10",{"name":"c","title":"a"},"22":{"name":"d","title":"c"}}
我想第一个问题是禁用最后一个outter键排序?
那么我该如何获得title
的价值?算法运行时,$JSON::PP::a
和$JSON::PP::b
包含来自相同散列的值name
和title
。
这我想不通。任何人都可以解释这一点,和/或帮我写这个算法?
旁注:如果订单真的很重要,我认为你可能应该发送数组而不是对象(好,数组)。这些样品有很多代码味道。 :| – Ashley 2011-06-08 20:45:35
@Ashley:顺序非常重要。如何将我的对象编码到一个对象数组中? – 2011-06-08 21:50:56
您将引用包含散列的数组(并可能将'keys/id'移入散列)。你可能不得不重新安排你的客户端处理,但它比依赖对象/对顺序更有意义,即使在JS中也是如此。你说你想要按“标题”排序的东西,但你想要的输出似乎按“名称”或“键”排序。也许一个新的问题是:服务器上的输入和数据的客户端处理(?)。 – Ashley 2011-06-08 22:16:49