我正在解析一个JSON文件,我有一个数组数组@AllArgumentsArray ..带有这个AOA的数组是我将遍历的JSON部分。示例JSON是:
{
name: "myThing",
value: {
UveVirtualMachineAgent: {
vm_name: "TuttyFruity"
}
}
},
现在我写的函数会得到很多参数,比如
&GetAnalyticsDataInHash($json,'name','value,UveVirtualMachineAgent,vm_name');
sub GetAnalyticsDataInHash{
my @AllArgumentsArray; #The rest of the arguments in an array
my $decoded_json = $_[0];
for (my $i=1;$i<=$#_;$i++){
push @AllArgumentsArray, [ split /,/, $_[$i] ]; #split them and make array of arrays ..
}
print Dive($decoded_json, @AllArgumentsArray[0]), "\n";
}
DumperShows数组在AOA中...但是我不确定如何在潜水功能中传递完整数组?
DB<5> p Dumper @AllArgumentsArray
$VAR1 = [
'value',
'UveVirtualMachineAgent',
'vm_name'
];
$VAR2 = [
'value',
'get',
'this'
];
答案 0 :(得分:0)
取消引用AOA并将其发送给Dive的方法是
print Dive($_, @{$AllArgumentsArray[0]});
答案 1 :(得分:0)
GetAnalyticsData
看起来应该接受#34;以逗号分隔的哈希键路径的任意数量的参数&#34;有点像'value,UveVirtualMachineAgent,vm_name'
。因此,您必须将所有这些传递给Dive()
,例如使用arrayref:
Dive($decoded_json, \@AllArgumentsArray);
或者你循环它们并将它们一个接一个地传递给Dive。然后你可以在你所拥有的循环中完成它,这可以更清楚地写成:
sub GetAnalyticsDataInHash{
my $decoded_json = shift;
for my $path (@_) {
Dive($decoded_json, [ split /,/, $path ]);
}
}
当然,你可能想要用Dive()
的结果做点什么,但是我不能在没有看到这个功能的情况下说出来。