如何在perl中检查散列键是否包含JSON?

时间:2015-01-29 07:50:03

标签: json perl

我正在向端点url发送请求,从那里我以JSON的形式获得响应,但如果失败则返回某些文本。

发送请求:

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

所以在此之前:

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

我想检查响应是否是json格式。我们如何在Perl中处理这个问题,请帮助解决这个问题

3 个答案:

答案 0 :(得分:5)

您可以捕获from_json()

引发的异常
my $resp;
my $ok = eval { $resp = from_json("{}"); 1 };
$ok or die "Not valid json";

或更简单,

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

答案 1 :(得分:0)

使用JSON或JSON :: XS将JSON解码为Perl结构。

简单示例:

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

答案 2 :(得分:0)

您可以使用https://www.ravellosystems.com/solutions/esxi-cloud/install-esxi-on-aws

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