2013-08-01 5 views
2

У меня есть проблема, чтобы сопоставить все URLs в декодированном содержимом JSon ... Я пытался, но получает ошибку: Не ссылку HASH ...Как отобразить декодированный JSON Perl

$text = decode_json($document); 
#print Dumper($text); 
my @urls = map { $_->{'uri'} } @{$text->{children}->{children}}; 
print @urls; 

Здесь декодируется JSON, мне нужно чтобы захватить URLs ... Когда я бегу Whithout одна -> {дети} Я не получаю сообщение об ошибке, но не может получить URLS только некоторые Воулс как Parets, название, тип и т.д ...

$VAR1 = { 
      'lastModified' => '1375048740407000', 
      'children' => [ 
          { 
          'parent' => 1, 
          'children' => [ 
              { 
               'parent' => 2, 
               'lastModified' => '1374933801475000', 
               'type' => 'text/x-moz-place-separator', 
               'id' => 15, 
               'title' => '', 
               'dateAdded' => '1374933801475000' 
              } 
              ], 
          'dateAdded' => '1374933800710000', 
          'lastModified' => '1375356010239000', 
          'title' => 'Bookmarks Menu', 
          'id' => 2, 
          'type' => 'text/x-moz-place-container', 
          'root' => 'bookmarksMenuFolder' 
          }, 
          { 
          'parent' => 1, 
          'children' => [ 
              { 
               'parent' => 3, 
               'charset' => 'UTF-8', 
               'uri' => 'http://projects.org/#', 
               'dateAdded' => '1375356057087000', 
               'lastModified' => '1375356057097000', 
               'title' => 'projects', 
               'id' => 24, 
               'type' => 'text/x-moz-place' 
              }, 
              { 
               'parent' => 3, 
               'charset' => 'UTF-8', 
               'uri' => 'http://kalja.org/', 
               'dateAdded' => '1375356063615000', 
               'index' => 1, 
               'lastModified' => '1375356063615000', 
               'title' => 'Kalja.org', 
               'id' => 25, 
               'type' => 'text/x-moz-place' 
              } 
              ], 
          'annos' => [ 
             { 
              'flags' => 0, 
              'value' => 'Add bookmarks to this folder to see them displayed on the Bookmarks Toolbar', 
              'name' => 'bookmarkProperties/description', 
              'type' => 3, 
              'mimeType' => undef, 
              'expires' => 4 
             } 
             ], 
          'dateAdded' => '1374933800710000', 
          'index' => 1, 
          'lastModified' => '1375356065865000', 
          'root' => 'toolbarFolder', 
          'title' => 'Bookmarks Toolbar', 
          'id' => 3, 
          'type' => 'text/x-moz-place-container' 
          }, 
          { 
          'parent' => 1, 
          'children' => [], 
          'dateAdded' => '1374933800710000', 
          'index' => 2, 
          'lastModified' => '1374933800710000', 
          'title' => 'Tags', 
          'id' => 4, 
          'type' => 'text/x-moz-place-container', 
          'root' => 'tagsFolder' 
          }, 
          { 
          'parent' => 1, 
          'children' => [], 
          'dateAdded' => '1374933800710000', 
          'index' => 3, 
          'lastModified' => '1375356065865000', 
          'title' => 'Unsorted Bookmarks', 
          'id' => 5, 
          'type' => 'text/x-moz-place-container', 
          'root' => 'unfiledBookmarksFolder' 
          } 
         ], 
      'root' => 'placesRoot', 
      'type' => 'text/x-moz-place-container', 
      'id' => 1, 
      'title' => '', 
      'dateAdded' => '1374933800710000' 
     }; 

Спасибо заранее

ответ

3

У вас есть вложенные структуры, поэтому вам понадобится вложенный map's

my @urls = map { 
    map { $_->{'uri'} } @{$_->{children}} 
} 
@{$text->{children}}; 
+0

Если вы хотите пропустить детей без 'uri', тогда' map {$ _-> {'uri'} или()} ..' –

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