Основываясь на этом сообщении, я пытаюсь понять, как sort_by
работает в JSON::PP
.
Когда я запускаю этот код
#!/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"}}
Полагаю, первая проблема - отключить сортировку последнего внешнего ключа?
Тогда как мне это сделать?получить значение title
?Когда алгоритм работает, $JSON::PP::a
и $JSON::PP::b
содержат значения name
и title
из того же хэша.
Это я не могу понять.Кто-нибудь может объяснить это и / или помочь мне написать этот алгоритм?