我一直在解析这里找到的json代码:http://steamcommunity.com/market/listings/440/Name%20Tag/render/?count=10&start=10并尝试从数据中提取信息。 (这是一个将响应粘贴到:http://json.parser.online.fr/)
的解析器我想找出
"steamid_lister":"76561198054594560",
值。
我使用以下代码执行此操作:
use JSON::XS;
use WWW::Mechanize;
use HTTP::Cookies;
use LWP::UserAgent;
use strict;
use warnings;
use LWP::Simple;
my $url = "http://steamcommunity.com/market/listings/440/Name%20Tag/render/?count=10&start=10";
my $json = get $url;
my $data = decode_json $json;
my @infoids = keys %{$data -> {listinginfo}};
foreach my $infoid (@infoids) {
print $infoid . "\n";
}
foreach my $infoid (@infoids) {
my $price = $data -> {listinginfo}{$infoid}{converted_price} ?$data -> {listinginfo}{$infoid}{converted_price} : 0 ; #Problem is here
print $price . "\n";
}
在命令提示符下执行时,我得到:
2837579576399030707
2837579576272398122
2828572377224672029
2836453676551501383
2837579576412912762
2837579576057748967
2837579576057701282
2837579576057640907
2837579576412827087
2836453676554468348
0
0
0
0
0
0
0
0
0
0
第一组数字是列表ID,它们工作正常,但0是问题。我应该得到更多的数字,所以我假设我引用注释行上的“steamid_lister”对象错误,但我不知道如何解决这个问题。任何帮助都会非常感激。
感谢您的时间 Seb Morris
答案 0 :(得分:2)
关键是,您尝试访问不存在的密钥converted_price
!只需使用price
foreach my $infoid (@infoids) {
my $price = $data->{listinginfo}->{$infoid}->{price} ? $data->{listinginfo}->{$infoid}->{price} : 0;
print $price . "\n";
}