Mojo::UserAgent响应和漂亮的JSON



我有下面的代码,它使用Mojo::UserAgent来获得json响应:

$tx = $ua->get($host.'/api/endpoint/streams' => {Token  => $token , accept => 'application/json' ,'Content-Type' => 'application/json' });
print $tx->res->body;

将结果返回为JSON并打印为原始JSON,我的问题是如何将结果打印为漂亮的JSON

您正在以从API返回的格式打印响应主体。这只是一个没有缩进的JSON字符串。为了让它看起来漂亮,您必须将它解码为Perl数据结构(如果足够的话,您可以在此时打印它来读取它(,然后在启用漂亮打印的情况下将它转换回JSON。

Mojo::Message内置了解析功能,所以你可以这样做:

my $streams = $tx->res->json;

如果你只想读取结果,那么在这一点上,你可以使用Data::Dumper或更好的读取方法,比如Data::Printer。

use Data::Dumper;
print Dumper $streams;

您已经有了Mojo::UserAgent所使用的Mojo::JSON,但它似乎不能很好地打印。JSON::PP自5.14版本以来一直使用Perl代码,因此使用它可能是安全的。

use JSON::PP;
print JSON::PP->new->utf8->pretty(1)->encode($streams);

我通常不在乎是否有漂亮的东西打印JSON,因为我将使用jq来完成该任务。一旦我开始工作,我很少自己查看JSON,当我确实想这样做时,这很容易:

perl script.pl | jq -r .

这样,我的程序就不需要做任何额外的工作,我不需要额外的依赖项,我也不会把漂亮的JSON版本强加给那些不关心它的东西

最新更新