Pooja Dubey
Pooja Dubey

Reputation: 683

How to check whether hash key contain JSON in perl?

I am sending a request to the endpoint url ,from there i am getting the response in case of success in form of JSON,but if it fails it return certain text .

Sending request:

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

So before doing this:

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

i want to check whether the reponse is in json format or not .How we can handle this in Perl kindly help in this

Upvotes: 6

Views: 2536

Answers (3)

munkiepus
munkiepus

Reputation: 66

You could use a try/catch block using Try::Tiny

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

Upvotes: 0

eLemEnt
eLemEnt

Reputation: 1801

Use JSON or JSON::XS to decode the JSON into a Perl structure.

Simple example:

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.
}

Upvotes: 0

mpapec
mpapec

Reputation: 50637

You can catch exception thrown by from_json(),

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

or simpler,

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

Upvotes: 6

Related Questions