Как получить доступ к данным, хранящимся в Hash - PullRequest
5 голосов
/ 01 марта 2010

У меня есть этот код:

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

Когда я пишу переменную print %perl, она говорит HASH (0x9e04db0). Как я могу получить доступ к данным в этом HASH?

Ответы [ 5 ]

13 голосов
/ 01 марта 2010

Поскольку метод decode фактически возвращает ссылку на хеш, правильный способ присвоения будет:

%perl = %{ $coder->decode ($json) };

Тем не менее, чтобы получить данные из хэша, вы можете использовать встроенный каждый или циклически перебирать его ключи и извлекать значения путем подписки.

while (my ($key, $value) = each %perl) {
    print "$key = $value\n";
}

for my $key (keys %perl) {
    print "$key = $perl{$key}\n";
} 
7 голосов
/ 01 марта 2010

JSON :: XS-> decode возвращает ссылку на массив или хеш. Чтобы сделать то, что вы пытаетесь сделать, вы должны сделать это:

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

print %{$perl};

Другими словами, вам придется разыменовывать хеш при его использовании.

5 голосов
/ 01 марта 2010

Возвращаемое значение decode не является хешем, и вам не следует присваивать его %hash - когда вы это делаете, вы уничтожаете его значение. Это хеш ссылка и должен быть присвоен скаляру. Читать perlreftut .

0 голосов
/ 01 марта 2010

Вам необходимо указать конкретный ключ хеша, тогда только вы сможете получить доступ к данным из хеша.

Например, если% perl hash имеет ключ с именем 'file';

Вы предполагаете получить доступ, как показано ниже

print $ perl {'file'}; # будет напечатано значение ключа файла хеша% perl

0 голосов
/ 01 марта 2010

Много способов, вы можете использовать foreach loop

foreach my $key (%perl)
{
  print "$key is $perl{$key}\n";
}

или while loop

* +1007 *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...