我有这段代码:
$coder = JSON::XS->new->utf8->pretty->allow_nonref;
%perl = $coder->decode ($json);
当我写print %perl
变量时,它会显示HASH(0x9e04db0)。如何访问此HASH中的数据?
答案 0 :(得分:13)
由于decode
方法实际上将引用返回给哈希,因此分配的正确方法是:
%perl = %{ $coder->decode ($json) };
也就是说,要从哈希中获取数据,您可以使用each内置或循环其键并通过下标检索值。
while (my ($key, $value) = each %perl) {
print "$key = $value\n";
}
for my $key (keys %perl) {
print "$key = $perl{$key}\n";
}
答案 1 :(得分:7)
JSON :: XS-> decode返回对数组或散列的引用。要做你想做的事,你必须这样做:
$coder = JSON::XS->new->utf8->pretty->allow_nonref;
$perl = $coder->decode ($json);
print %{$perl};
换句话说,在使用时你必须取消引用哈希值。
答案 2 :(得分:5)
decode
的返回值不是哈希值,您不应该将其分配给%hash
- 当您这样做时,会破坏其值。它是一个哈希引用,应该分配给标量。阅读perlreftut。
答案 3 :(得分:-3)
很多方法,你可以使用foreach loop
foreach my $key (%perl)
{
print "$key is $perl{$key}\n";
}
或while loop
while (my ($key, $value) = each %perl)
{
print "$key is $perl{$key}\n";
}
答案 4 :(得分:-3)
您需要指定哈希的特定键,然后只有您才能从哈希中访问数据。
例如,如果%perl hash具有名为'file'的键;
您想要访问如下
print $ perl {'file'}; #它将打印%perl哈希的文件键值