2010-09-12 13 views
6

Po kodzie perl napisałem do parsowania tablicy w JSON. Ale zwrócona tablica ma długość 1 i nie jestem w stanie iterować poprawnie. Problem polega na tym, że nie mogę użyć zwróconej tablicy.Parsowanie tablicy zakodowanej w JSON przez 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"; 

Wyjście przychodzi:

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

Odpowiedz

16

The decode_json function zwraca arrayref, a nie lista. Musisz dereference niego, aby uzyskać listę:

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

może chcesz przeczytać perldoc perlreftut i perldoc perlref

+0

Dereferencja trochę pomaga. Teraz jestem w stanie iterować po tablicy zwróconej. Ale wciąż mam długość tablicy = 1 –

+0

Moja zła. Używał długości (@dekodowany_json), aby uzyskać długość tablicy! –

1

chodzi JSON, może chcesz się upewnić, że instalacja modułu JSON :: XS, ponieważ jest szybsze i bardziej stabilny niż czysta implementacja perla dołączona do modułu JSON. Moduł JSON automatycznie użyje JSON :: XS, gdy będzie dostępny.