如何访问存储在Hash中的数据

时间:2010-03-01 09:22:54

标签: perl json

我有这段代码:

$coder = JSON::XS->new->utf8->pretty->allow_nonref;
%perl = $coder->decode ($json);

当我写print %perl变量时,它会显示HASH(0x9e04db0)。如何访问此HASH中的数据?

5 个答案:

答案 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哈希的文件键值