Matti Mäkitalo: Perl-Hash nach JSON

Beitrag lesen

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