2010-03-01 13 views

Respuesta

5

El valor de retorno de decode no es un hash y no debe asignarse a un %hash - cuando lo hace, destruye su valor. Es una referencia hash y debe asignarse a un escalar. Lee perlreftut.

+0

Bien, descubrí que las teclas de impresión% {$ perl} me dan la clave de Hash, pero los valores de impresión% {$ perl} me dan otra referencia de Hash. Así que guardé esta referencia en una nueva variable escalar, pero cuando intento acceder a los datos en este Hash, no me da nada. $ json = '{"glossary": {"title": "glosario de ejemplo", "GlossDiv": {"title": "S"}}}'; $ coder = JSON :: XS-> new-> utf8-> pretty-> allow_nonref; $ perl = $ codificador-> decodificar ($ json); teclas de impresión% {$ perl}, "\ n"; #giveme glossary print values% {$ perl}, "\ n"; #giveme HASH (dirección) my $ val = values% {$ perl}; # dirección de tienda teclas de impresión% {$ val}; ## no dar nada - título esperado –

-3

montón de maneras, se puede utilizar un foreach loop

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

o una while loop

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

Es necesario especificar la clave particular de picadillo, entonces sólo usted podrá acceder a los datos del hash.

Por ejemplo, si% perl hash tiene una clave llamada 'archivo';

Se supone que debe tener acceso, como a continuación

de impresión $ perl { 'archivo'}; # Sería imprimir el valor de clave de archivo del hash% Perl

13

Como el método decode realidad devuelve una referencia en Hash, la forma correcta de asignar sería:

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

Dicho esto, para obtener los datos del hash, puede usar el each integrado o recorrer sus claves y recuperar los valores mediante la subscripción.

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

for my $key (keys %perl) { 
    print "$key = $perl{$key}\n"; 
} 
7

JSON :: XS-> decode devuelve una referencia a una matriz o un hash. Para hacer lo que está tratando de hacer que tendría que hacer esto:

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

print %{$perl}; 

En otras palabras, usted tiene que eliminar la referencia al hachís al usarlo.

Cuestiones relacionadas