Hi,
"1": [ {
"author": "author1",
"title": "title1"
}],
"2": [ {
"author": "author2",
"title": "title2"
}],
"3": [ {
"author": "author3",
"title": "title3"
}]
Kann es zu einer ID denn mehrere Titel geben? Wenn nein: wozu der Array?
> Müsste ich dann innerhalb des normalen Arrays noch ein Hash-Array aufbauen, damit ich das obige Resultat erhalte?
>
> Also sowas wie
>
> ~~~perl
> while (($id, $author, $title) = $dbh->fetchrow_array()) {
> $hash{$id} = [$authorHash{'author'} => $author, $titleHash{'title'} => $title];
> }
>
Dein äußeres Objekt ist ein Hash mit dem Feld ID als Schlüssel, das stimmt soweit.
Dem weist du ein Array zu. Deine obige JSON-Struktur zeigt, dass du innerhalb des Arrays einen Hash haben willst. Also müsstest du
[ {$authorHash{'author'} => $author, $titleHash{'title'} => $title} ]
zuweisen. Allerdings erlaubst du damit nicht, dass zu einer ID mehrere Einträge existieren können. Wenn es fachlich nicht sinnvoll ist, dann entferne einfach die Array-Klammern (dann ist einer ID genau ein Eintrag zugeordnet.
Wenn es vorkommen kann, dass einer ID mehrere Einträge zugeordnet werden können, dann musst du prüfen, ob $hash{$id} schon existiert. Wenn nicht, legst du es wie von mir gezeigt an, ansonsten pusht du deinen author/title-Hash in den Array rein.
Bis die Tage,
Matti