Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl:如何对JSON结构进行排序;根“;关键属性_Perl_Json_Sorting - Fatal编程技术网

perl:如何对JSON结构进行排序;根“;关键属性

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}->{$

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}->{$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);