【问题标题】:Extracting data from a multi-level hash从多级哈希中提取数据
【发布时间】:2015-01-06 15:02:52
【问题描述】:

我得到以下数据结构作为来自网络服务调用的响应。

my $triggers1 = $zabbix->raw('trigger','get', $options1);
print Dumper($triggers1);

输出

          $VAR1 = {
                   '10305122' => {
                      'hosts' => [
                                   {
                                     'name' => 'pc4b12cf254444',
                                     'maintenance_type' => '0',
                                     'hostid' => '19295'
                                   }
                                 ],
                      'priority' => '1',
                      'status' => '0',
                      'dependencies' => [],
                      'templateid' => '9892568',
                      'comments' => '',
                      'state' => '0',
                      'triggerid' => '10305122',
                      'expression' => '{14127122}=0',
                      'error' => '',
                      'url' => '',
                      'flags' => '0',
                      'value' => '0',


                    }


           324234' => {
                      'hosts' => [
                                   {
                                     'name' => 'pc45657ba34gy0423',
                                     'maintenance_type' => '0',
                                     'hostid' => '19439'
                                   }
                                 ],
                      'priority' => '1',
                      'status' => '0',
                      'dependencies' => [],
                      'templateid' => '9896452',
                      'comments' => '',
                      'state' => '0',

                      'triggerid' => '10324234',
                      'expression' => '{14167689}=0',
                      'error' => '',
                      'url' => '',
                      'flags' => '0',
                      'value' => '0',
                      'value_flags' => '0',
                      'lastchange' => '1420266068',
                      'type' => '0'

    };

有多个相似的记录

从这个输出中,我想打印 'name' 和 'value' 的值。

如何使用 Perl 打印?

【问题讨论】:

    标签: perl hash zabbix


    【解决方案1】:

    怎么样:

        my  $triggers1 = {
                   '10305122' => {
                      'hosts' => [
                                   {
                                     'name' => 'pc4b12cf254444',
                                     'maintenance_type' => '0',
                                     'hostid' => '19295'
                                   }
                                 ],
                      'priority' => '1',
                      'status' => '0',
                      'dependencies' => [],
                      'templateid' => '9892568',
                      'comments' => '',
                      'state' => '0',
                      'triggerid' => '10305122',
                      'expression' => '{14127122}=0',
                      'error' => '',
                      'url' => '',
                      'flags' => '0',
                      'value' => '0',
    
    
                    },
    
    
           324234 => {
                      'hosts' => [
                                   {
                                     'name' => 'pc45657ba34gy0423',
                                     'maintenance_type' => '0',
                                     'hostid' => '19439'
                                   }
                                 ],
                      'priority' => '1',
                      'status' => '0',
                      'dependencies' => [],
                      'templateid' => '9896452',
                      'comments' => '',
                      'state' => '0',
    
                      'triggerid' => '10324234',
                      'expression' => '{14167689}=0',
                      'error' => '',
                      'url' => '',
                      'flags' => '0',
                      'value' => '0',
                      'value_flags' => '0',
                      'lastchange' => '1420266068',
                      'type' => '0'
    
    }
    };
    

    为了便于阅读,代码与数据断开连接:

    foreach my $k (keys %$triggers1) {
        print "key=$k";
        foreach my $h (@{$triggers1->{$k}{hosts}}) {
            print "\nname=",$h->{name} // 'not defined';
            //                use this ^^ to avoid Use of uninitialized value in print at 
        }
        print "\nvalue=",$triggers1->{$k}{value} // 'not defined',"\n";
    }
    

    输出:

    key=324234
    name=pc45657ba34gy0423
    value=0
    key=10305122
    name=pc4b12cf254444
    value=0
    

    【讨论】:

    • 酷。它打印了键和值。对于 name 的 print 语句,它给出了这个错误 Use of uninitialized value in print
    • @SandeepMadhu:看我的编辑。使用print "\nname=",$h->{name} // 'not defined';
    • 对于这个语句,我收到错误'匿名哈希中的奇数个元素' my $options1={'nodeids' => '0','triggerids' => 324234,'output' = > 'extend','selectHosts' => {'name','hostid','maintenance_status','maintenance_type','maintenanceid','description'},'selectItems' => {'itemid','hostid', 'key_','name','value_type'},'selectDependencies' => 'extend','selectLastEvent' => '1','expandDescription' => '1','preservekeys' => '1'};有什么想法吗?
    • 忽略我之前的查询。我想通了..键值对定义不正确。非常感谢你的帮助。得到了正确的结果
    猜你喜欢
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多