首页 > 解决方案 > Perl HTTP 微小响应

问题描述

如何将 JSON 响应HTTP::Tiny放入 Perl?

use HTTP::Tiny;

my $response = HTTP::Tiny->new->get('http://example.com/');

die "Failed!\n" unless $response->{success};

print "$response->{status} $response->{reason}\n";

while (my ($k, $v) = each %{$response->{headers}}) {
   for (ref $v eq 'ARRAY' ? @$v : $v) {
        print "$k: $_\n";
   }
}

print $response->{content} if length $response->{content};

如何将$response->{content}要传递给html(tt2)的变量放入?

标签: jsonperlhttp

解决方案


您可以像这样将您的内容传递给 TT 处理器:

use Template;

my $tt = Template->new;

$tt->process('some_template.tt', { content => $response->{content} })
  or die $tt->error;

也许您想先将其存储在中间标量中:

my $content = $response->{content};

$tt->process('some_template.tt', { content => $content })
  or die $tt->error;

也许您想在将 TT 的变量散列传递给处理器之前建立它。

my %vars;

$vars{content} = $response->{content};

$tt->process('some_template.tt', \%vars)
  or die $tt->error;

或者您可以使用散列引用而不是实际散列:

my $vars;

$vars->{content} = $response->{content};

$tt->process('some_template.tt', $vars)
  or die $tt->error;

更新:在评论中,simbabque建议您实际上可能在询问如何将 JSON 内容解码为数组或散列。我同意这是解释您的问题的另一种方式。

您需要使用JSON模块。它看起来像这样:

use JSON;

my $json_parser = JSON->new; # Perhaps other options here, see docs.

my $decoded_json = $json_parser->decode($response->{content});

推荐阅读