2010-09-12 21 views
6

Siguiendo el código perl que he escrito para analizar una matriz en JSON. Pero la matriz devuelta tiene longitud 1 y no puedo iterar sobre ella correctamente. Entonces el problema es que no puedo usar la matriz devuelta.Analizando una matriz codificada en JSON a través de 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"; 

La salida viene:

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

Respuesta

16

Los decode_json function devuelve un arrayref, no una lista. Debe eliminar la referencia para obtener la lista:

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

es posible que desee leer y perldoc perlreftutperldoc perlref

+0

La desreferencia ayuda un poco. Ahora puedo iterar sobre la matriz devuelta. Pero aún obtengo la longitud de la matriz = 1 –

+0

Mi mal. Estaba usando la longitud (@decoded_json) para obtener la longitud de la matriz !! –

1

En cuanto a JSON, es posible que desee asegurarse de instalar el módulo JSON :: XS, ya que es más rápido y más estable que la implementación de Perl puro incluido con el módulo JSON. El módulo JSON utilizará JSON :: XS automáticamente cuando esté disponible.

Cuestiones relacionadas