2010-11-22 8 views
0

mysqlデータベースにアクセスするperlスクリプトからJSONを出力しようとしています。json結果をPerlでループする方法

クエリをループしてJSONモジュールを使用してJSONに変換する方法はありますか?

私はこれを行うと私が得るすべては1リターン

while($query_handle->fetch()) { 
    $jsonStructure->{event}; 
    $jsonStructure->{event}->{evid} = $evid; 
    $jsonStructure->{event}->{component} = $component; 
    $jsonStructure->{event}->{firstTime} = $firstTime; 
    $jsonStructure->{event}->{lastTime} = $lastTime; 
    $jsonStructure->{event}->{count} = $count; 
    $jsonStructure->{event}->{summary} = $summary; 
    $jsonStructure->{event}->{severity} = $severity; 
} 

です基本的に私は多くのイベントがあり、

答えて

3
ありがとう... [0]イベントを言う方法がわかりません

私が何を探していることはこれだと思う:

push @{ $jsonStructure->{events} }, { 
    evid => $evid, 
    component => $component, 
    ..., 
}; 

ヨーヨーので、でもそれは、おそらく過剰ですが、 DBの列名のすべては、あなたがJSONにするフィールド名と同じであり、あなたはすべての列をしたい場合、または

while (my $row = $dbh->fetchrow_hashref) { 
    push @{ $jsonStructure->{events} }, $row; 
} 

my @keys = qw(evid component firstTime ...); 

while (my $row = $dbh->fetchrow_hashref) { 
    my %hash; 
    @hash{@keys} = @$row{@keys}; 
    push @{ $jsonStructure->{events} }, \%hash; 
} 
uのは、おそらくのような何かを行うことができます

いくつかの列のみが必要な場合は:

# DB colname => JSON field name 
my %mapping = (
    event_id => 'evid', 
    component => 'component', 
    first_time => 'firstTime', 
    ..., 
); 

while (my $row = $dbh->fetchrow_hashref) { 
    my %hash; 
    @hash{ values %mapping } = @$row{ keys %mapping }; 
    push @{ $jsonStructure->{events} }, \%hash; 
} 

完全に任意のマッピングです。 Perlとそのすべてのパワー。 :)

+0

おかげさまで、これらは本当に素晴らしい例です。 – shaneburgess

関連する問題