2010-11-22 7 views
0

J'essaye de produire le JSON d'un manuscrit de perl qui accède à une base de données mysql. Comment puis-je faire défiler les résultats de mes requêtes et les convertir en JSON en utilisant le module JSON?Comment boucler les résultats de json dans Perl

Quand je fais tout ce que je reçois est 1 retour

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; 
} 

Fondamentalement, j'ai beaucoup d'événements et je ne sais pas comment dire l'événement [0] ...

Merci

Répondre

3

Je pense que ce que vous cherchez est le suivant:

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

bien même cela est probablement excessif, parce que yo u peut sans doute faire quelque chose comme:

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

si tous les noms de colonnes dans la base de données sont les mêmes que les noms de champs que vous voulez dans le JSON, et que vous voulez toutes les colonnes, ou:

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

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

si vous ne souhaitez que des colonnes, ou:

# 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; 
} 

pour une cartographie complètement arbitraire. Pouvoir de Perl et tout ça. :)

+0

Merci beaucoup, ce sont de très bons exemples. – shaneburgess

Questions connexes