perl:如何对JSON结构进行排序;根“;关键属性
Perl: 如何使用JSON::PP对复杂结构进行排序 从JSON文档中: 当排序例程在 JSON::PP范围,给定的子例程 名称和特殊变量$a、$b 将以“JSON::PP::”开头 这是我的尝试,似乎不起作用perl:如何对JSON结构进行排序;根“;关键属性,perl,json,sorting,Perl,Json,Sorting,Perl: 如何使用JSON::PP对复杂结构进行排序 从JSON文档中: 当排序例程在 JSON::PP范围,给定的子例程 名称和特殊变量$a、$b 将以“JSON::PP::”开头 这是我的尝试,似乎不起作用 open my $fh, ">", $file or warn " exportAsJSON: can't open file: '$file': $!"; print $fh $coder->sort_by(sub {$_->{column_def}->{$
open my $fh, ">", $file or warn " exportAsJSON: can't open file: '$file': $!";
print $fh $coder->sort_by(sub {$_->{column_def}->{$JSON::PP::a} cmp $_->{column_def}->{$JSON::PP::b} } )->encode(\%json);
close $fh;
我想按键排序,然后是“column_def”下面属性键上的column_def属性,即。
密度、深度(单位:m)、磁感应强度
:
除了按散列键排序之外,我不确定我是否理解您希望JSON输出如何排序。如果这就是您想要的,只需向
canonical
方法传递一个true参数
use strict;
use warnings;
use JSON::PP;
# A simple hash-of-hashes for exploration.
my $h = {
Z => { c => 1, d => 2 },
A => { a => 3, r => 4 },
B => { c => 5, x => 6 },
S => { q => 7, d => 8 },
};
my $js = JSON::PP->new;
$js->canonical(1);
my $output = $js->encode($h);
print $output;
如果确实使用了sort\u by
方法,则在sort
块中使用$\u
没有意义:它代表什么?文档中不清楚sort\u by
代码将接收哪些参数。像这样使用Data::Dumper
:
use Data::Dumper qw(Dumper);
my $sorter = sub {
# See what's going on.
print "$JSON::PP::a cmp $JSON::PP::b\n";
print Dumper(\@_, $_);
<STDIN>;
# Sort hash keys alphabetically.
$JSON::PP::a cmp $JSON::PP::b;
};
my $output = $js->sort_by($sorter)->encode($h);
我很想知道为什么你要对一些东西进行排序,这些东西将解析为散列,而散列没有固有的顺序。@熊会吃掉你:事实上,内存中的表示没有固有的顺序。我想将排序后的散列结构保存到一个文件(或tempfile)中,用于区分和视觉检查(以及以后更复杂的事情)。预期的排序:首先按散列键的字母顺序,其次按第一个hashref子键的字母顺序。或者,(第二)用数字表示“pos”(在计算出排序在嵌套结构上的工作方式之后)。个人提示:这是一个类似的问题:在编写自己的排序程序时需要注意。$JSON::PP::VERSION='2.27200'似乎没有将JSON::PP对象作为第一个参数。对于上一个示例,版本>=2.27200上的分类器需要使用my$hashref=shift;
use Data::Dumper qw(Dumper);
my $sorter = sub {
# See what's going on.
print "$JSON::PP::a cmp $JSON::PP::b\n";
print Dumper(\@_, $_);
<STDIN>;
# Sort hash keys alphabetically.
$JSON::PP::a cmp $JSON::PP::b;
};
my $output = $js->sort_by($sorter)->encode($h);
my $sorter = sub {
my ($json_pp_object, $hash_ref) = @_;
# Write your own comparator here.
};
my $output = $js->sort_by($sorter)->encode($h);