2016-09-08 8 views
-1

У меня есть следующий выход из хэша в Perl:хэши массивов хэшей Массивы

$VAR1 = { 
    'ins_api' => { 
      'sid' => 'eoc', 
      'outputs' => { 
       'output' => [ 
        { 
        'body' => { 
         'TABLE_interface' => { 
          'ROW_interface' => [ 
           { 
           'vdc_lvl_in_pkts' => 17081772, 
           'vdc_lvl_in_avg_bits' => 3128, 
           'eth_autoneg' => 'on', 
           'eth_speed' => '1000 Mb/s', 
           'admin_state' => 'up', 
           'vdc_lvl_out_mcast' => '65247', 
           'state' => 'up', 
           'eth_mtu' => '1500', 
           'eth_hw_addr' => '78ba.f9ad.b248', 
           'eth_mdix' => 'off', 
           'interface' => 'mgmt0', 
           'eth_ip_addr' => '10.56.32.84', 
           'eth_bw' => 1000000, 
           'vdc_lvl_in_avg_pkts' => '3', 
           'vdc_lvl_out_bytes' => '3463952330', 
           'vdc_lvl_in_ucast' => '7653891', 
           'eth_ip_prefix' => '10.', 
           'eth_rxload' => '1', 
           'eth_txload' => '1', 
           'eth_reliability' => '255', 
           'eth_dly' => 10, 
           'vdc_lvl_in_mcast' => '8742911', 
           'eth_ip_mask' => 24, 
           'eth_bia_addr' => '78ba.f9ad.b248', 
           'eth_duplex' => 'full', 
           'vdc_lvl_out_pkts' => '8668507', 
           'vdc_lvl_out_avg_pkts' => '1', 
           'vdc_lvl_in_bcast' => '684970', 
           'vdc_lvl_out_avg_bits' => '1840', 
           'medium' => 'broadcast', 
           'vdc_lvl_out_bcast' => '5', 
           'vdc_lvl_out_ucast' => '8603255', 
           'eth_ethertype' => '0x0000', 
           'vdc_lvl_in_bytes' => '1985125644', 
           'eth_hw_desc' => 'GigabitEthernet' 
           }, 
           { 
           'eth_babbles' => '0', 
           'eth_outbytes' => '7362149107971', 
           'eth_outucast' => '16348249961', 
           'eth_clear_counters' => 'never', 
           'eth_watchdog' => '0', 
           'eth_inpkts' => 8644872191, 
           'eth_inbytes' => '3415386845315', 
           'eth_out_flowctrl' => 'off', 
           'eth_bad_proto' => '0', 
           'eth_frame' => '0', 
           ----- output omitted ------- 
           }, 

Что бы лучшим способом цикла через ROW_interface массива и напечатать некоторые элементы? Я просто пытаюсь получить элементы в массиве ROW_interface.

+0

'perldoc perldsc' – toolic

ответ

0
my $ROW_Interfaces = $output->{body}{TABLE_interface}{ROW_interface}; 

for my $ROW_Interfaces (@$ROW_Interfaces) { 
    ... 
} 

Кажется, что может быть более чем один output, так что вы будете иметь, чтобы найти подходящий аналогично.

+0

Большое спасибо за помощь. Я сделал: foreach (@ {$ interfaceDecodedJSON -> {'ins_api'} -> {выходы} {output} [0] {body} {TABLE_interface} {'ROW_interface'}}) {сделайте что-нибудь ..}; – Andrew

0

Похоже на ответ @ ikegami, но обрабатывает несколько записей output. if defined... существует, поскольку структура не завершена, и я не был уверен, что каждая запись имеет одинаковые ключи или нет.

for my $output (@{ $VAR1->{ins_api}{outputs}{output} }){ 
    for my $row_int (@{ $output->{body}{TABLE_interface}{ROW_interface} }){ 
     print "$row_int->{eth_frame}\n" if exists $row_int->{eth_frame}; 
    } 
} 
+0

хороший пример, спасибо! – Andrew