簡體   English   中英

使用 Mojo::UserAgent 並訪問 JSON 作為響應?

[英]Using Mojo::UserAgent and accessing the JSON in response?

如何在 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 甚至其他語言的其他用戶代理庫的主要區別)。 要獲得響應,您可以使用resresult方法。 如果由於發生連接錯誤(ENONETWORK)而無法發出請求,則result將為您而死:

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::MessageMojo::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 );

我能夠像這樣訪問這些數據,

my $api_order = $tx_cart->result->json->{data};

這是result不是body

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM