Perl:访问JSON查询的一部分

时间:2014-05-17 21:45:27

标签: json perl parsing

我一直在撰写我正在制作的网站的一部分,统计页面的一部分将显示有关Json网站响应的信息。

网站地址为:http://steamcommunity.com/market/listings/440/Name%20Tag/render/?count=1&start=1&query=

以下是解析器的链接,因此代码更易于阅读http://json.parser.online.fr/

到目前为止我编写的代码有效,但无论我尝试什么,我都无法获得所需的信息。

use JSON::XS;
use WWW::Mechanize;
use HTTP::Cookies;
use LWP::Simple;
use strict;
use warnings;

my $url = "http://steamcommunity.com/market/listings/440/Name%20Tag/render/?count=2&start=2";
my $json = get $url;
my $data = decode_json $json;
my $info = $data -> {listinginfo};

我的问题是我想访问列表的价格,但是当新列表可用时,它们的参考会发生变化。我不知道如何解决这个问题,谷歌没有帮助。非常感谢任何帮助,提前谢谢。

Seb Morris。

编辑:感谢您的回复,我已经完成了我的代码并最终得到了:

my $data = decode_json $json;
my @infoids = keys %{$data -> {listinginfo}};

foreach my $infoid (@infoids) {
my $price = $data -> {listinginfo}{$infoid}{converted_price};
print "$price" . "\n";
}

但是我收到错误:在第30行的字符串中使用未初始化的值$ price。我不明白为什么我收到此错误,因为我已经声明了变量。任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:1)

如果我理解,你的问题是listinginfo对象包含为每个请求更改的密钥,而你不知道要找出你刚刚提出的请求的密钥。

您可以使用“keys”功能找到perl哈希的键。所以你可以像这样获得listinginfo哈希的所有键:

my @infoids = keys %{$data -> {listinginfo}};

注意需要使用%{}来取消引用listinfo,它本身就是一个哈希引用。

可能有多个信息ID,但是当我测试您在问题中链接的网络服务时,它只返回了一个。如果你确定只有一个,你可以使用:

my $price = $data -> {listinginfo}{$infoids[0]}{price};

或者,如果可能有多个,您可以遍历它们:

foreach my $infoid (@infoids) {
    my $price = $data -> {listinginfo}{$infoids[0]}{price};
    # Now do something with price
}