2010-03-01 26 views

Trả lời

5

Giá trị trả lại của decode không phải là băm và bạn không nên chỉ định giá trị đó cho số %hash - khi bạn thực hiện, bạn sẽ hủy giá trị của nó. Đó là tham chiếu băm và phải được gán cho vô hướng. Đọc perlreftut.

+0

OK, tôi đã tìm ra rằng các phím in% {$ perl} lấy khóa từ Hash, nhưng các giá trị in% {$ perl} lại cho tôi một tham chiếu Hash khác. Vì vậy, tôi đã lưu trữ tham chiếu này trong biến vô hướng mới, nhưng khi tôi cố gắng truy cập dữ liệu trong Hash này, nó cho tôi không có gì. $ json = '{"glossary": {"title": "bảng chú giải thuật ngữ", "GlossDiv": {"title": "S"}}}'; $ coder = JSON :: XS-> new-> utf8-> pretty-> allow_nonref; $ perl = $ coder-> decode ($ json); phím in% {$ perl}, "\ n"; #give me glossary giá trị in% {$ perl}, "\ n"; #give me HASH (địa chỉ) my $ val = values% {$ perl}; # store address các phím in% {$ val}; ## không cung cấp gì - tiêu đề dự kiến –

-3

Rất nhiều cách khác nhau, bạn có thể sử dụng một foreach loop

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

hoặc một while loop

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

Bạn cần phải xác định chính cụ thể của băm, sau đó chỉ bạn sẽ có thể truy cập dữ liệu từ băm.

Ví dụ: nếu% perl hash có khóa được gọi là 'tệp';

Bạn giả sử truy cập như bên dưới

in $ perl {'file'}; # Nó sẽ in giá trị then chốt tập tin của các hash% perl

13

Là phương pháp decode thực sự trả về một tham chiếu để băm, cách thích hợp để gán sẽ là:

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

Điều đó nói rằng, để lấy dữ liệu từ hàm băm, bạn có thể sử dụng số dựng sẵn hoặc vòng lặp each trên khóa của nó và truy lục giá trị theo chỉ số con.

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

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

JSON :: XS-> giải mã trả về tham chiếu đến mảng hoặc băm. Để làm những gì bạn đang cố gắng làm, bạn sẽ phải làm điều này:

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

print %{$perl}; 

Nói cách khác, bạn sẽ phải bỏ qua băm khi sử dụng nó.

Các vấn đề liên quan