2010-03-01 8 views

Antwort

5

Der Rückgabewert von decode ist kein Hash und Sie sollten es nicht einer zuweisen - wenn Sie dies tun, zerstören Sie seinen Wert. Es ist ein Hash Referenz und sollte einem Skalar zugewiesen werden. Lesen Sie perlreftut.

+0

OK, ich habe herausgefunden, dass die Drucktasten% {$ perl} den Schlüssel aus Hash holen, aber die Druckwerte% {$ perl} erhalten eine weitere Hash-Referenz. Also habe ich diese Referenz in einer neuen Skalarvariablen gespeichert, aber wenn ich versuche, auf Daten in diesem Hash zuzugreifen, gibt es mir nichts. $ json = '{"Glossar": {"title": "Beispielglossar", "GlossDiv": {"title": "S"}}}'; $ coder = JSON :: XS-> neu-> utf8-> pretty-> allow_nonref; $ perl = $ coder-> dekodieren ($ json); Druckschlüssel% {$ Perl}, "\ n"; #give me glossary Druckwerte% {$ perl}, "\ n"; #give me HASH (Adresse) my $ val = Werte% {$ perl}; # Adresse speichern Drucktasten% {$ val}; ## gib nichts - Titel erwartet –

-3

viele Möglichkeiten, können Sie ein foreach loop

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

oder ein while loop

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

Sie müssen verwenden, um die bestimmten Schlüssel von Hash spezifizieren, dann Sie können auf die Daten aus dem Hash zugreifen.

Zum Beispiel, wenn% perl Hash hat Schlüssel namens "Datei";

Sie annehmen, wie unten

print $ perl zuzugreifen { 'Datei'}; # Würde es den Dateischlüssel-Wert der% Perl Hash

13

Da die decode Methode tatsächlich gibt eine Referenz Hash, der richtige Weg wäre es, zuzuordnen drucken:

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

Um die Daten aus dem Hash zu erhalten, können Sie die each Built-in oder Schleife über ihre Schlüssel verwenden und die Werte durch Subskribierung abrufen.

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

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

JSON :: XS-> Dekodierung gibt einen Verweis auf ein Array oder einen Hash zurück. Zu tun, was Sie zu tun versuchen würden Sie haben, dies zu tun:

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

print %{$perl}; 

Mit anderen Worten, Sie haben zu dereferenzieren dem Hash, wenn es zu benutzen.

Verwandte Themen