如何用JSON数据填充列表?
这是我的代码:
my $groups = get_groups($t);
my @group;
my $i = 0;
do {
push(@group, {
groups => [
{ type => $groups->{groups}->[$i]->{type} , group => $groups->{groups}->[$i]->{group} },
]
});
$i++;
} while ($i < length $groups->{groups});
这是json示例:
{
"error":false,
"message":"success",
"group":[
{"type":1,"group":"group1"},
{"type":2,"group":"group2"},
{"type":3,"group":"group3"},
{"type":4,"group":"group4"},
{"type":5,"group":"group5"}
]
}
函数get_groups($t);
将返回json以上。我想获取数组group
并将其放入列表groups
。但是我得到了:
在使用“严格引用”时,不能将字符串(“ 0”)用作HASH引用
答案 0 :(得分:2)
来自the documentation of length
:
以字符为单位返回EXPR值的长度。如果EXPR是 省略,返回$ _的长度。如果未定义EXPR,则返回 undef。
不能在整个数组或哈希上使用此函数来查找 这些有多少个元素。为此,请使用标量@array和标量 分别为%hash键。
要获取数组引用中的元素数,您需要取消引用并将其放入 scalar 上下文中。
my $foo = [ qw/a b c/ ];
my $number_of_elements = scalar @{ $foo }; # 3
您真正想要做的是遍历teams数组中的每个团队。无需获取元素数量。
my @teams;
foreach my $team ( @{ $opsteams->{teams} } ) {
push @teams, {
type => $team->{type},
team => $team->{team},
};
}
您的代码中还有一些额外的深度层。我不确定它们是干什么的。实际上,您似乎只想要@teams
中的团队,
my @teams = @{ $opsteams->{teams} };