2010-09-12 22 views
6

Aşağıdaki perl kodu JSON'ta bir diziyi ayrıştırmak için yazdım. Ancak döndürülen dizinin uzunluğu 1'dir ve düzgün şekilde yineleyemiyorum. Yani sorun, döndürülen diziyi kullanamıyorum.JSON içinde kodlanmış bir diziyi ayrıştırma perl

#!/usr/bin/perl 
use strict; 

my $json_text = '[ {"name" : "abc", "text" : "text1"}, {"name" : "xyz", "text" : "text2"} ]'; 

use JSON; 
use Data::Dumper::Names; 

my @decoded_json = decode_json($json_text); 
print Dumper(@decoded_json), length(@decoded_json), "\n"; 

çıkışı gelir:

$VAR1 = [ 
    { 
     'text' => 'text1', 
     'name' => 'abc' 
     }, 
     { 
     'text' => 'text2', 
     'name' => 'xyz' 
     } 
    ]; 
1 

cevap

16

decode_json function döner bir arrayref değil, bir liste. Bunu KQUEUE listesini almak için gerekir:

my @decoded_json = @{decode_json($json_text)}; 

Sen perldoc perlreftut ve JSON İlişkin

+0

Dereferencing biraz yardımcı olur. Şimdi döndürülen dizinin üzerinde yineleyebiliyorum. Ama hala ben dizi = 1 –

+0

Benim kötü. Dizinin uzunluğunu almak için length (@decoded_json) kullanıyordum! –

1

perldoc perlref, bunu olduğu gibi JSON :: XS modülü takmak emin olmak isteyebilirsiniz okumak isteyebilirsiniz daha hızlı ve JSON modülünde bulunan saf perl uygulamasından daha kararlı. JSON modülü, mevcut olduğunda JSON :: XS'i otomatik olarak kullanacaktır.