2016-05-11 6 views
0

JSONファイルを解析していて、配列@AllArgumentsArrayの配列が1つあります。このAOAを持つ配列は、通過するJSONのセクションです。今、私が書いている機能は、配列がAOAであるPerl配列の配列の1つをサブルーチンに渡します

&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のような多くの引数を取得します

{ 
name: "myThing", 
    value: { 
    UveVirtualMachineAgent: { 
     vm_name: "TuttyFruity" 
     } 
    } 
}, 

..しかし、私はフルを渡す方法を確認していない:サンプルJSONでありますダイブ機能のアレイですか?

DB<5> p Dumper @AllArgumentsArray 
    $VAR1 = [ 
      'value', 
      'UveVirtualMachineAgent', 
      'vm_name' 
      ]; 
    $VAR2 = [ 
      'value', 
      'get', 
      'this' 
      ]; 
+1

'GetAnalyticsDataInHash($ json、 'name'、 'value、UveVirtualMachineAgent、vm_name')'を呼び出すときに、 'Dive'の引数をどのようにしたいですか? – ikegami

+2

'@ AllArgumentsArray'にはあなたが言うことが含まれているわけではありません。 – ikegami

答えて

0

AOA逆参照への道とダイブに送信し、一種「ハッシュキーのカンマで区切られたパス」の任意の数の引数を受け入れることになっているように見える

print Dive($_, @{$AllArgumentsArray[0]}); 
0

GetAnalyticsDataです'value,UveVirtualMachineAgent,vm_name'のように。したがって、これらのすべてをDive()に渡す必要があります。 arrayref:

Dive($decoded_json, \@AllArgumentsArray); 

を使用するか、ループして1つずつダイブします。あなたはおそらくDive()の結果とsmethingやりたいだろうが、私は言うことはできません。もちろん、

sub GetAnalyticsDataInHash{ 
    my $decoded_json = shift; 
    for my $path (@_) { 
     Dive($decoded_json, [ split /,/, $path ]); 
    } 
} 

を:次に、あなただけとにかく、あなたが持っているループ内でそれを行うことができ、それがより明確に、このように書くことができこの機能を見ることなく。

関連する問題