如何訪問數據我有這樣的代碼:於存儲在哈希
$coder = JSON::XS->new->utf8->pretty->allow_nonref;
%perl = $coder->decode ($json);
當我寫print %perl
變量,它說HASH(0x9e04db0)。我如何訪問這個HASH中的數據?
如何訪問數據我有這樣的代碼:於存儲在哈希
$coder = JSON::XS->new->utf8->pretty->allow_nonref;
%perl = $coder->decode ($json);
當我寫print %perl
變量,它說HASH(0x9e04db0)。我如何訪問這個HASH中的數據?
decode
的返回值不是散列,你不應該將它分配給%hash
- 當你這樣做時,你會破壞它的值。這是一個散列參考並應分配給標量。閱讀perlreftut。
很多方法,你可以使用一個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";
}
您僅需要指定哈希的特定鍵,然後你將能夠從哈希中訪問數據。
例如,如果%perl hash具有名爲'file'的鍵;
你想訪問類似下面
打印$ {perl的 '文件'}; #這將打印%Perl中的哈希的文件密鑰值
由於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";
}
JSON :: XS-> decode返回對數組或散列的引用。做你正在嘗試做的,你就必須做到這一點:
$coder = JSON::XS->new->utf8->pretty->allow_nonref;
$perl = $coder->decode ($json);
print %{$perl};
換句話說,你會使用時必須取消引用哈希值。
好的,我發現打印鍵%{$ perl}讓我從哈希鍵,但打印值%{$ perl}讓我另一個哈希引用。所以我將這個引用存儲在新的標量變量中,但是當我嘗試訪問這個Hash中的數據時,它什麼也不給我。 $ json ='{「glossary」:{「title」:「example glossary」,「GlossDiv」:{「title」:「S」}}}'; $ coder = JSON :: XS-> new-> utf8-> pretty-> allow_nonref; $ perl = $ coder-> decode($ json); 打印鍵%{$ perl},「\ n」; #give me詞彙表 打印值%{$ perl},「\ n」; #give me HASH(地址) my $ val = values%{$ perl}; #商店地址 打印鍵%{$ val}; ##什麼也不給 - 標題預期 – 2010-03-02 12:08:25