【发布时间】:2011-04-01 17:12:30
【问题描述】:
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属性,即 密度,depth_in_m,mag_sus :
{
"column_def":
{
"depth_in_m":
{
"names":"depth_in_m",
"pos":"0"
},
"mag_sus":
{
"names":
{
"A_ALIAS":"Mag-Sus.",
"A_DESC":"magnetic susceptibility in SI",
"ATTRIBUTE":"MAG_SUS"
},
"pos":"2"
},
"density":
{
"names":
{
"A_ALIAS":"Density",
"A_DESC":"density in gm\/cc",
"ATTRIBUTE":"DENSITY"
},
"pos":"1"
}
},
"data":
{
"depth_in_m":"14.635",
"mag_sus":"n.a.",
"density":"n.a."
}
}
【问题讨论】:
-
我很想知道您为什么要对将解析为哈希的东西进行排序 - 它没有固有的顺序。
-
@Bears 会吃掉你:确实,内存中的表示没有内在的顺序。我想将排序后的哈希结构保存到文件(或临时文件)中,以进行差异和视觉检查(以及之后更复杂的事情)。