如何在 mojo 响应中访问 JSON?
$txn = $ua->post( $url, $headers, json => {json} )
从 txn 获取 JSON 响应的方法是什么?
如何在 mojo 响应中访问 JSON?
$txn = $ua->post( $url, $headers, json => {json} )
从 txn 获取 JSON 响应的方法是什么?
我在我的书Mojolicious Web Clients中有几个例子,但这里是交易。
当您发出请求时,您会返回一个事务对象:
my $ua = Mojo::UserAgent->new;
my $tx = $ua->post( ... );
事务对象同时具有请求和响应(Mojo 与 LWP 甚至其他语言的其他用户代理库的主要特征)。要获得响应,您可以使用res
orresult
方法。如果由于result
发生连接错误(ENONETWORK)而无法发出请求,则会为您而死:
my $res = $tx->result;
一旦你得到响应,你可以做很多事情(这些在Mojo::UserAgent的 SYNOPIS 部分。如果你想将结果保存到文件中,这很容易:
$res->save_to( 'some.json' );
您可以将内容转换为 DOM 并提取部分 HTML 或 XML:
my @links = $res->dom->find( 'a' )->map( attr => 'href' )->each;
对于 JSON 响应,您可以将内容提取到 Perl 数据结构中:
my $data_structure = $res->json;
但是,如果您想要原始 JSON(原始的、未解码的内容主体),那就是请求的消息主体。把它想象成文字的、未过滤的文本:
use Mojo::JSON qw(decode_json);
my $raw = $res->body;
my $data_strcuture = decode_json( $raw );
由于这是响应对象,因此Mojo::Message和Mojo::Message::Response向您展示了您可以做什么。
这是一个完整的测试程序:
#!perl
use v5.12;
use warnings;
use utf8;
use Mojo::JSON qw(decode_json);
use Mojo::UserAgent;
use Mojo::Util qw(dumper);
my $ua = Mojo::UserAgent->new;
my $tx = $ua->get(
'http://httpbin.org/get',
form => {
name => 'My résumé'
},
);
die "Unsuccessful request"
unless eval { $tx->result->is_success };
my $data_structure = $tx->res->json;
say dumper( $data_structure );
my $raw = $tx->res->body;
say $raw;
my $decoded = decode_json( $raw );
say dumper( $decoded );
I was able to get access to this data like this,
my $api_order = $tx_cart->result->json->{data};
It's in result
not in body
.