如何在Perl中检查哈希键是否包含JSON?

6
我正在向端点URL发送请求,如果成功,我将以JSON格式得到响应,但如果失败,则会返回某些文本。
发送请求:
$data->{response} = $self->{_http}->send($myData);

所以,在做这件事之前:
$resp = from_json($data->{response});

我想检查响应是否为 JSON 格式。请问如何在 Perl 中处理?请帮忙。
3个回答

6
您可以捕获由 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";

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接