2016-11-03 16 views
0

特定の形式のperlプログラムからJSONを出力する必要があります。キャッチにはループが含まれています。 ここ形式です:出力データ用のハッシュをJSONに書き込む

{"data":[ 
    { 
    "data_point":"1" 
    } 
    { 
    "data_point":"2" 
    } 
]} 

これは無ループで動作します:

$data = {"data" => [{"data_point" => "1"}, {"data_point" => "2"}]}; 
open my $fh, ">", "data.json"; 
print $fh encode_json($data); 
close $fh; 

私はこれがループで動作するように取得するにはどうすればよいですか?

@list = (1,2); 
foreach $number (@list) { 
    $data = ? 
} 

ありがとうございました。

答えて

1

ハッシュリファレンスが必要です。ハッシュリファレンスは、唯一のキーの値が配列参照であり、ハッシュリファレンスが要素として含まれています。

my @list = (1..2); 

my $data->{data} = [ map { { data_point => $_ } } @list ]; 

use Data::Dumper; 
print Dumper $data; 
map

は、キーdataの値として割り当てられ[ ]によって配列リファレンスになるハッシュリファレンス{ data_point => $_ }のリストを構築します。

=>の演算子によって、左辺の引数が引用符として扱われるため、''のキーを省略することができます。したがってdata'data'と同じです。 Comma operator in perlopを参照してください。

これは、Data::Dumperを使用してチェックされるものです。 'data'よりも多くのキーについては、ループ内に行を置くことができ、さまざまなデータ記述文字列にはmap内のサブ文字を使用できます。

0

リストから、ハッシュの配列(1)を作成します。次に、その配列を別のハッシュに入れます。

my @list = (1..2); 
my @data; 
push @data, { data_point => $_ } for(@list); # (1) 

my $result = { data => \@data };     # (2) 

ハッシュにはスカラー値のみが含まれ、配列は含まれません。ここでは配列の参照を格納します:\@data

関連する問題