Perl,如何从json

时间:2017-03-16 10:32:58

标签: arrays json perl

所以,我有json的这个例子:

{
        "tab" : {
            "sort" : "true",
            "sort_by" : "0",
            "name" : "blablabla",
            "cols" : [
                "time_ep",
                "count_warning",
                "count_critical"
            ]
        }
    }

在我将其解码为perl hash之后,我遇到了" cols"阵列。 print Dumper ${$params->{$tab}}{cols}看起来像那样

$VAR1 = [
          'time_ep',
          'count_warning',
          'count_critical'
        ];

我找不到这个数组的大小。当我尝试这样做时 - 它会返回1ARRAY(adress),但是当我尝试获取这样的数组元素时: print Dumper ${$params->{$tab}}{cols}[1] - 我得到了我需要的东西:

$VAR1 = 'count_warning';

我尝试使用refs的各种选项,但没有什么能给我我需要的东西。 有什么建议吗?

1 个答案:

答案 0 :(得分:4)

获取cols的大小:

print scalar @{$params->{tab}->{cols}};

您正在从此键检索数组引用,取消引用它以获取数组,然后在标量上下文中使用它 - 它返回数组的大小。

#!/usr/bin/env perl
use strict;
use warnings;
use JSON;
use Data::Dumper;

my $params = from_json(
   '{
        "tab" : {
            "sort" : "true",
            "sort_by" : "0",
            "name" : "blablabla",
            "cols" : [
                "time_ep",
                "count_warning",
                "count_critical"
            ]
        }
    }'
);

print Dumper $params;
print scalar @{ $params->{tab}->{cols} }

注意 - scalar明确强制标量上下文,但如果你进行标量操作,它会隐式发生。像连接或数字比较。 (print不强制标量上下文)