我一直在撰写我正在制作的网站的一部分,统计页面的一部分将显示有关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。我不明白为什么我收到此错误,因为我已经声明了变量。任何帮助都会非常感激。
答案 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
}