我有这个示例代码
#!/usr/bin/perl
use strict;
use warnings;
use JSON::PP qw( );
use Data::Dumper qw (Dumper);
my $json = JSON::PP->new()->pretty->utf8; # lesbares JSON | Sort numerically
my %ORDER = (id => 1, name => 2);
$json->sort_by(sub {
($ORDER{$JSON::PP::a} // 999) <=> ($ORDER{$JSON::PP::b} // 999)
or $JSON::PP::a cmp $JSON::PP::b
});
print $json->encode(
[
{name => 'ABS700', id => 0, data => [
{
dmsg => 's4F038300', state => 'T: 3.3', user => 'SD_Protocol'
}
]
},
{name => 'GT-WT-02', id => 0, data => [
{
dmsg => 's5410AC5F9800', state => 'T: 17.2 H: 47', user => 'Ralf9'
}
]
},
{name => 'NEU', id => 99, data => [
{
dmsg => 's5410AC5F9800', state => 'T: 17.2 H: 47', user => 'NEUER'
}
]
},
{name => 'Ventus W132', id => 4, data => [
{
dmsg => 'sD66EE1603000', user1 => 'dirigent', comment => 'wind',
readings => [{ state => 'windGuest: 1.2 winddir:0' }]
}
]
},
],
);
我想对它进行排序,使结尾带有“ id => 99”的值。
我可以对所有内部值进行任意排序,但是我需要进行新的外部排序。
我该如何解决这个问题?
答案 0 :(得分:5)
->sort_by
用于控制哈希元素的顺序。
您要控制数组元素的顺序。
对于数组,没有等效于->sort_by
的机制,因为不需要数组。虽然您不能自然地控制哈希返回其元素的顺序,但是您自然可以控制数组返回其元素的顺序。
my $data = [ ... ];
@$data = sort { $a->{id} <=> $b->{id} } @$data;
print $json->encode($data);