基於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