2012-04-09 14 views
0

PerlからJSONにデータを出力しようとしています。私は単純な出力を行うことができますが、より良い構造を作りたいと思います。PerlからJSONへのキーと値のペア

私はID、開始時間と終了時間を持つ配列を持っています。

print header('application/json'); 
my $json->{$entry} = \@array; 
my $json_text = to_json($json); 
print $json_text; 

返します:これは私が出力に使用していたコードである

{"Season":[["1","1330065300","1344038401"],["7","1298505601","1312416001"]]} 

をしかし、私はより多くのような出力に何かしたいと思います:

{"Season":0[{"id":1,"DateStart":1330065300,"DateEnd":1344038401},{"id":7,"DateStart":1298505601,"DateEnd":1312416001}]} 

は誰がするかに手伝ってくれる私の出力をより良く構造化しますか?

---

ありがとうございます。私はあなたの例を実装しようとしました。

これは現時点でのコードです:

foreach my $key (keys %$seasons) 
    { 
     $seasons->{$key} = 
     [ 
      map 
      { 
       { id=>$_[0], DateStart=>$_[1], DateEnd=>$_[2] } 
      } @{$seasons->{$key}} 
     ]; 
    } 

しかし、それは(foreachのラインを参照)のエラーを返します。

Not a HASH reference at line 148 

$季節が

fetchall_arrayref SQLからの配列リファレンスリターンです

手がかりはありますか?

+0

ていますか? – dsolimano

+2

返信するコードが無効なJSONです。それは本当にそこにあるはずですか? – Quentin

+1

JSONでハッシュを作成するには、構造のその部分をPerl構造のハッシュにする必要があります。 –

答えて

2

基本的には、配列の配列をハッシュの配列に変換する必要があります。これはmapを使用して行うことができます。あなたの構造が$dataされると仮定すると、これはそれを行う必要があります:あなたはhttp://search.cpan.org/~mlehmann/JSON-XS-2.32/XS.pmようCPANライブラリを使用することができ

for my $key (keys %$data) { 
    $data->{$key} = [ 
     map { 
      { id => $_->[0], DateStart => $_->[1], DateEnd => $_->[2] } 
     } @{$data->{$key}} 
    ];  
} 
+0

ちょっとマイケル、私の更新されたコードをチェックして、私が間違っていることを教えてくれませんか? – skeniver

2

配列の配列の代わりにキーと値のペアを持つオブジェクトの配列を出力する場合は、最初に適切なデータをto_jsonに入れます。

つまり、配列の配列ではなく、hashrefの配列です。

use map to transform the dataです。

2

このようなことをしようとするときは、常にCPANをチェックして、誰かが前にそれをやっているかどうかを見直してみてください。私はJSONと呼ばれるモジュールを見つけました。これはあなたが望むものとまったく同じように思えます。

このページには、あなたが望むものとまったく同じ例があります。ここには簡単な言い換えがあります:

use JSON; # imports encode_json, decode_json, to_json and from_json. 

# simple and fast interfaces (expect/generate UTF-8) 
my $utf8_encoded_json_text = encode_json \@array; 

それより簡単にはできません。最良の部分は、配列構造がどれだけ複雑になっても、これが機能することです。

+0

質問者は既にJSONモジュールを使用しています。コードに 'to_json'の呼び出しがあります。 –

関連する問題