我正在解析html文件中的一个表,使其成为一个json文件。 我设置了属性名称列表。每次找到指定元素时,我都会将其存储在perl哈希中,并在列表中显示下一个名称(请参阅下面的代码)。然后我们使用JSON模块对哈希进行编码。但是对象中每个属性的顺序不是它们的插入顺序。
sub scan_line
{
my($elem) = @_; # HTML::Element
my %result = ();
my @tds = $elem->find("td");
my $index = 0; # of attrnames
foreach my $td (@tds){
$result{$attrnames[$index]} = $td->as_text();
$index++;
}
my $text = $json->encode(\%result);
print TARGET $text;
}
perl中是否有可以指定属性顺序或手动添加属性的方法,如“$ jobj-> add_attr($ attr,$ value)”?
答案 0 :(得分:0)
您可以使用:
my $text = $json->sort_by(sub { $JSON::PP::a cmp $JSON::PP::b })->encode(\%result);
当然你可以使用< =>而不是cmp或任何其他排序功能。请注意,如果您的JSON版本低于2.0,则必须显式创建$ json为JSON :: PP-> new(而不是JSON-> new)。
还要注意,这会降低性能(不仅是编码调用,而且是所有$ json用法,AFAIU)。