Perl解析JSON代码 - 为什么我的路径错了?

时间:2014-06-10 19:10:52

标签: json perl parsing syntax-error web-crawler

我一直在解析这里找到的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

1 个答案:

答案 0 :(得分:2)

关键是,您尝试访问不存在的密钥converted_price!只需使用price

进行试用即可
foreach my $infoid (@infoids) {
    my $price = $data->{listinginfo}->{$infoid}->{price} ? $data->{listinginfo}->{$infoid}->{price} : 0;
    print $price . "\n";
}