如何遍历反序列化的json字符串?我现在无法获得正确数量的值,它不算数。
my $list = request("http://localhost/getjson.php");
my $deserialize = from_json( $list );
print Dumper($deserialize);
$VAR1 = [
'ab',
'cc',
'de',
'aer',
'ffe',
'cer',
'dad',
'efef',
'afaf',
'ege',
'grsc',
'cegg',
'cegg',
'cegg/aaa.html',
'eggt',
'ttt'
];
print length($deserialize);
13 ?? it should say 16
答案 0 :(得分:5)
您将返回数组引用而不是数组。您需要取消引用该值。
my @array = @$deserialize; # or @{ $deserialize }
print scalar @array;
此外,如果您想迭代数组,可以使用for
for (@$deserialize) {
# do stuff
答案 1 :(得分:1)
This function cannot be used on an entire array or hash to find
out how many elements these have. For that, use "scalar
@array" and "scalar keys %hash", respectively.
您不能使用length
来查找数组的大小。为此,请使用上面的建议。
你的错误会给你一个错误值,因为你正在获取数组引用的长度,在字符串上下文中它将类似ARRAY(0x22d0a88)
,在你的情况下似乎是13个字符长。例如。相当于:
print length "ARRAY(0x22d0a88)";
作为一个奇怪的旁注,如果你做length(@array)
,它实际上将返回数组长度的长度。例如。大小为16的数组将返回2,因为字符串"16"
长度为两个字符。
答案 2 :(得分:1)
您实际上是在参考结果。由于JSON可以包含各种不同的结果,因此decode_json不会特别返回列表。
因此,您需要取消引用您拥有的变量:$ deserialize
此外,您真的不想使用长度函数。如果打印数组的整数值(或标量值),它将返回它的大小。
所以这就是你想要的:
my $list = request("http://localhost/getjson.php");
my $deserialize = from_json( $list );
print scalar (@{$deserialize});
这将打印数组的大小。
如果您想从一个数组开始,您可以这样做:
my $list = request("http://localhost/getjson.php");
my $deserialize = from_json( $list );
my @json_array = @{$deserialize});
print scalar (@json_array);