【发布时间】:2016-10-27 23:14:19
【问题描述】:
我正在尝试Hash::Ordered 而不是Tie::IxHash,因为它似乎更快。
虽然Tie::IxHash 工作正常,但我在使用Hash::Ordered 时遇到了一些问题。关键是要对哈希进行排序(在 Perl 中通常是随机的)。
use Hash::Ordered;
use JSON::XS;
use Data::Dumper;
use strict;
use warnings;
my $json = JSON::XS->new;
my $oh = Hash::Ordered->new;
$oh->push('result' => { 'counter' => "123" }, 'number' => { 'num' => '55' });
my @r = $oh->as_list;
$json->pretty(1);
my $jsondata = $json->encode(\@r);
print Dumper $jsondata;
结果很奇怪:
[
"result",
{
"counter" : "123"
},
"number",
{
"num" : "55"
}
]
这是Tie::IxHash 的工作示例,我尝试使用Hash::Ordered 获得相同的结果。
use Data::Dumper;
use Tie::IxHash;
use JSON::XS;
use strict;
use warnings;
my $json = JSON::XS->new;
my %h;
tie(%h, 'Tie::IxHash', result => { counter => "123" }, number => { num => '55' });
$json->pretty(1);
my $pretty_json = $json->encode(\%h);
print Dumper $pretty_json;
输出
{
"result" : {
"counter" : "123"
},
"number" : {
"num" : "55"
}
}
【问题讨论】:
-
我不知道是否相关,但似乎有
JSON::XS不处理绑定变量的情况:Strange behavior of a tied hash in perl, when asking for an arrayref