如何在perl中指定json对象的属性顺序?

时间:2015-03-11 06:29:22

标签: json perl

我正在解析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)”?

1 个答案:

答案 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)。