2016-10-06 2 views
0

Я прохожу через декодированный JSON, возвращенный из Pingdom's «Получить подробную информацию о проверке» -API. Я пытаюсь напечатать URL-адрес в данных JSON, но мне трудно это делать.Печать URL-адреса из Pingdom с помощью Perl

Вот ответ JSON я получил:

{ 
    "check" : { 
    "id" : 85975, 
    "name" : "My check 7", 
    "resolution" : 1, 
    "sendtoemail" : false, 
    "sendtosms" : false, 
    "sendtotwitter" : false, 
    "sendtoiphone" : false, 
    "sendnotificationwhendown" : 0, 
    "notifyagainevery" : 0, 
    "notifywhenbackup" : false, 
    "created" : 1240394682, 
    "type" : { 
     "http" : { 
     "url" : "/", 
     "port" : 80, 
     "requestheaders" : { 
      "User-Agent" : "Pingdom.com_bot_version_1.4_(http://www.pingdom.com/)" 
     } 
     } 
    }, 
    "hostname" : "s7.mydomain.com", 
    "status" : "up", 
    "lasterrortime" : 1293143467, 
    "lasttesttime" : 1294064823 
    } 
} 

И вот мой Perl код, который должен напечатать URL:

my $decoded_info = decode_json($json) or die "Failed to decode!\n"; 
foreach my $check($decoded_info->{check}) { 
    print "$decoded_info->{$check}->{type}->{http}->{url}\n"; 
} 

Я прочитал ссылку на Perl и учебник, но он по-прежнему не работает.

ответ

1

Вы хотите

$decoded_info->{check}->{type}->{http}->{url} # ok 

и $check имеет значение

$decoded_info->{check}; 

так что вы должны использовать

$check->{type}->{http}->{url}     # ok 

вместо

$decoded_info->{$check}->{type}->{http}->{url} # BAD 

Кстати,

my $check = $decoded_info->{check}; 
... 

проще, чем

foreach my $check($decoded_info->{check}) { 
    ... 
} 
+0

Спасибо. Я делал это сложнее, чем следовало бы. – Stephens

0

Существует только один элемент внутри проверки.

{ 
    "check" : {      // here 
    "id" : 85975, 
    "name" : "My check 7", 
    "resolution" : 1, 
    "sendtoemail" : false, 
    "sendtosms" : false, 
    "sendtotwitter" : false, 
    "sendtoiphone" : false, 
    "sendnotificationwhendown" : 0, 
    "notifyagainevery" : 0, 
    "notifywhenbackup" : false, 
    "created" : 1240394682, 
    "type" : { 
     "http" : { 
     "url" : "/", 
     "port" : 80, 
     "requestheaders" : { 
      "User-Agent" : "Pingdom.com_bot_version_1.4_(http://www.pingdom.com/)" 
     } 
     } 
    }, 
    "hostname" : "s7.mydomain.com", 
    "status" : "up", 
    "lasterrortime" : 1293143467, 
    "lasttesttime" : 1294064823 
    } 
} 

Нет причин перебирать что-либо. Вы можете избавиться от цикла foreach и просто использовать строку check как свой хэш-ключ.

#      vvvvv 
print "$decoded_info->{check}->{type}->{http}->{url}\n"; 
+0

Спасибо. Это правда. – Stephens

Смежные вопросы