如何使用Perl解析来自服务器的JSON/REST数据

问题描述:

我试图使用Perl解析出服务器的JSON输出。 REST数据的连接和下载是好的,我只需要帮助解析返回的数据。这里是我的代码片段:如何使用Perl解析来自服务器的JSON/REST数据

my $response = HTTP::Tiny->new->get($SERVER_ADDR); 
if ($response->{success}) 
{ 
    my $html = $response->{content}; 
    @LINES = split /\n/, $html; 
    chomp(@LINES); 
    print("Lines: '@LINES'\n"); # ZZZ 
    my $decoded_json = decode_json($html); 
    print Dumper $decoded_json; 
} 
else 
{ 
    print "Failed: $response->{status} $response->{reasons}"; 
} 

,这里是结果:

Lines: '{"players":[{"currentlyOnline":false,"timePlayed":160317,"name":"MarisaG","lastPlayed":1474208741470}]}' 
$VAR1 = { 
     'players' => [ 
        { 
         'currentlyOnline' => bless(do{\(my $o = 0)}, 'JSON::PP::Boolean'), 
         'timePlayed' => 160317, 
         'lastPlayed' => '1474208741470', 
         'name' => 'MarisaG' 
        } 
        ] 
    }; 

会有下的“玩家”的登陆,现在每个玩家多个条目。有小费吗?

+0

你已经用'decode_json()'解析了json。 –

我不确定你在问什么。您已通过调用decode_json()成功解析了JSON。你现在有一个数据结构$decoded_json。您致电Dumper()会显示该数据的结构。这是一个带有单个密钥的散列参考,players。与该键关联的值是数组引用。被引用数组中的每个元素都是另一个散列。

例如,您可以用这样的代码打印所有玩家的名字。

foreach (@{ $decoded_json->{players} }) { 
    say $_->{name}; 
} 
+0

对于后缀' - > @ *'解引用有什么想法? –

+1

@Сухой27它比它的价值更值得痛苦,它需要'使用特征'和'没有实验性'的杂注。你可以将它用于整个代码库,并将它用在你始终使用的标准init代码中,但它不属于简短的例子。 – ysth

+0

这正是我正在寻找的。谢谢! –