【发布时间】:2018-10-05 01:15:12
【问题描述】:
如何用 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。但我得到了:
在使用“strict refs”时不能使用字符串(“0”)作为 HASH ref
【问题讨论】:
-
再次,请在问题中包含您的数据。此外,您可能不想使用
do ... while构造,它非常不成熟且难以阅读。而且这里不再有 JSON。 JSON现在无关紧要。现在只是数据。 -
length $opsteams->{teams}可能不是您想要的。这将返回字符串的字符长度,而不是数组的元素长度。试试scalar @{$opstreams->{teams}} -
@simbabque 更新了 json 样本。
-
正如我所说,您需要区分 JSON 和 Perl 数据结构。在您在此处显示的代码中,不再有 JSON。您已经将其转换为 Perl。虽然我可以使用 JSON 数据结构,但如果您想学习如何自己完成所有这些操作,了解其中的区别很重要。
-
@bluepanther:看来你有点挣扎。您最近发布了一些问题,在每种情况下,您似乎都没有真正理解您收到的对先前问题的答案。我建议您花几个小时仔细阅读并确保您了解这里发生了什么。例如,你知道 JSON 和从 JSON “解码”出来的 Perl 数据结构之间的区别吗?了解基础知识很重要。