2015-01-29 4 views
5

Sto inviando una richiesta all'URL endpoint, da lì sto ottenendo la risposta in caso di successo in forma di JSON, ma se fallisce restituisce un determinato testo.Come verificare se la chiave hash contiene JSON in perl?

richiesta Invio:

$data->{response} = $self->{_http}->send($myData); 

Quindi, prima di fare questo:

$resp = from_json($data->{response}); 

voglio verificare se il reponse è in formato JSON o no .come possiamo gestire questo in Perl gentilmente aiuto in questo

risposta

5

È possibile recuperare l'eccezione generata da from_json(),

my $resp; 
my $ok = eval { $resp = from_json("{}"); 1 }; 
$ok or die "Not valid json"; 

o più semplice,

my $resp = eval { from_json("rrr") }; 
$resp // die "Not valid json"; 
0

Utilizzare JSON o JSON :: XS per decodificare il JSON in una struttura Perl.

semplice esempio:

use strict; 
use warnings; 

use JSON::XS; 

my $json = '[{"Year":"2012","Quarter":"Q3","DataType":"Other 3","Environment":"STEVE","Amount":125},{"Year":"2012","Quarter":"Q4","DataType":"Other 2","Environment":"MIKE","Amount":500}]'; 

my $arrayref = decode_json $json; 

foreach my $item(@$arrayref) { 
    # fields are in $item->{Year}, $item->{Quarter}, etc. 
} 
0

Si potrebbe utilizzare un blocco try/catch utilizzando Try::Tiny

use Try::Tiny; 
try { 
    $resp = from_json($data->{response}); 
} catch { 
    # Do something if it does not parse 
    warn 'Could not parse json' 
};