Enrico: Notation und Erweiterung js-Array nach JSON

Hallo,

aufgrund der immens angewachsenen Datenfülle meiner DVD-Sammlung möchte ich von meiner aktuellen
Definition in einer js-Datei zur kompakteren JSON-Notation wechseln.

Aktuell habe ich folgende Definitionen:

var Filmdaten  = new Array ();

function Filmsammlung_einlesen ()
{
   Filmdaten[1] = new Object ();
   Filmdaten[1]["Nr"]     = "...";
   Filmdaten[1]["Titel"]  = "...";
   Filmdaten[1]["Inhalt"] = "...";
   Filmdaten[1]["Genre"]  = "...";
   Filmdaten[1]["FSK"]    = "...";

Filmdaten[2] = new Object ();
   Filmdaten[2]["Nr"]     = "2";
   Filmdaten[2]["Titel"]  = "...";
   Filmdaten[2]["Inhalt"] = "...";
   Filmdaten[2]["Genre"]  = "...";
   Filmdaten[2]["FSK"]    = "...";

...usw...
}

Meine zwei Probleme sind nun folgende:

Zum Einen muß ich, da ich eine Blätterfunktion einbinden möchte bzw. aufgrund der Fülle der Daten
und der damit verbunden Winzigkeit des Scrollkästchens einbinden muss, zum Anderen möchte ich aber
assoziativ auf die Elemente zugreifen.

Auf meine verkömmliche Notation ausgelegt benötige ich folgende Struktur:

var Seite = new Array ();

function Filmsammlung_einlesen ()
{
   Seite[1] = new Object ();

Seite[1]["Film"] = new Object ();

Seite[1]["Film"][1]["Nr"]     = "...";
         Seite[1]["Film"][1]["Titel"]  = "...";
         Seite[1]["Film"][1]["Inhalt"] = "...";
         Seite[1]["Film"][1]["Genre"]  = "...";
         Seite[1]["Film"][1]["FSK"]    = "...";

Seite[1]["Film"][2]["Nr"]     = "...";
         Seite[1]["Film"][2]["Titel"]  = "...";
         Seite[1]["Film"][2]["Inhalt"] = "...";
         Seite[1]["Film"][2]["Genre"]  = "...";
         Seite[1]["Film"][2]["FSK"]    = "...";

... usw ...

Seite[1]["Film"][30]["Nr"]     = "...";
         Seite[1]["Film"][30]["Titel"]  = "...";
         Seite[1]["Film"][30]["Inhalt"] = "...";
         Seite[1]["Film"][30]["Genre"]  = "...";
         Seite[1]["Film"][30]["FSK"]    = "...";

Seite[2] = new Object ();

Seite[2]["Film"] = new Object ();

Seite[2]["Film"][31]["Nr"]     = "...";
         Seite[2]["Film"][31]["Titel"]  = "...";
         Seite[2]["Film"][31]["Inhalt"] = "...";
         Seite[2]["Film"][31]["Genre"]  = "...";
         Seite[2]["Film"][31]["FSK"]    = "...";

Seite[2]["Film"][32]["Nr"]     = "...";
         Seite[2]["Film"][32]["Titel"]  = "...";
         Seite[2]["Film"][32]["Inhalt"] = "...";
         Seite[2]["Film"][32]["Genre"]  = "...";
         Seite[2]["Film"][32]["FSK"]    = "...";

... usw ...

Seite[2]["Film"][60]["Nr"]     = "...";
         Seite[2]["Film"][60]["Titel"]  = "...";
         Seite[2]["Film"][60]["Inhalt"] = "...";
         Seite[2]["Film"][60]["Genre"]  = "...";
         Seite[2]["Film"][60]["FSK"]    = "...";

... usw ...
}

Wie kann ich diese Struktur platzsparend und effektiv in JSON umsetzen ?

Soweit ich JSON richtig verstanden habe, gibt es hier keine Möglichkeiten, auf nummerierte assoziative Arrays
zuzugreifen, ich gebe hier ja feste Werte vor:

{
      "Kreditkarte"   : "Xema",
      "Nummer"        : "1234-5678-9012-3456",
      "Inhaber"       : {
         "Name"        : "Reich",
         "Vorname"     : "Rainer",
         "Geschlecht"  : ""männlich"",
         "Vorlieben"   : [
            "Reiten",
            "Schwimmen",
            "Lesen"
         ],
         "Alter"       : null
      },
   "Deckung"       : 1e+6,
   "Währung"       : "EURO"
}

Vielen lieben Dank für Eure Tips und Anregungen.

Gruß
Enrico

  1. Lieber Enrico,

    Soweit ich JSON richtig verstanden habe, gibt es hier keine Möglichkeiten, auf nummerierte assoziative Arrays
    zuzugreifen

    JavaScript kennt keine "assoziativen" Arrays. In JavaScript ist alles ein Objekt. Und mit der JSON-Schreibweise notierst Du genau das, ein Objekt.

    Du kannst Objekten Eigenschaften und Methoden geben. In Deinem Fall ist es wohl eher so, dass Du einem Objekt "Unterobjekte" gibst. Anstatt das hier zu schreiben:

    function Filmsammlung_einlesen ()
    {
       Filmdaten[1] = new Object ();
       Filmdaten[1]["Nr"]     = "...";
       Filmdaten[1]["Titel"]  = "...";

    könntest Du auch eine JavaScript-Datei schreiben, in der Du die Filmdaten einfach in einem Objekt definierst, das Du als Object-Literal notierst:

    Filmdaten = [ // hier wird ein Array-Objekt angelegt!  
        { // hier beginnt ein "anonymes" Objekt, das über einen Array-Index erreicht werden kann  
            Nr : "...",  
            Titel : "..."  
            Inhalt : "...",  
            Genre : "...",  
            FSK : "..."  
        }, // Ende des ersten Array-Eintrags (der ein Objekt ist)  
      
        { // nächstes Objekt  
            Nr : "...",  
            Titel : "..."  
            Inhalt : "...",  
            Genre : "...",  
            FSK : "..."  
        }  
    ]; // Ende des Arrays.
    

    Vielleicht siehst Du nun, wie die Array-Struktur in JSON notiert dem entspricht, wie Du Dir das im Grunde vorgestellt hast. Das Array enthält Objekte. Jedes Objekt enthält diverse Eigenschaften. In Deinem Anwendungsfalle entspricht ein Array-Eintrag einem Film, der als Objekt mit Eigenschaften definiert ist (sozusagen das JavaScript-Gegenstück zu den assoziativen Arrays in beispielsweise PHP).

    Um nun eine Umblätter-Funktion anzubieten, bräuchtest Du nur zu ermitteln, wieviele Einträge (alias "Objekte") Du auf einer Seite anbieten möchtest, um dann später im entsprechenden (durchnummerierten) Objekt fortzufahren.

    Wo hast Du jetzt noch Fragen?

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
  2. [latex]Mae  govannen![/latex]

    aufgrund der immens angewachsenen Datenfülle meiner DVD-Sammlung möchte ich von meiner aktuellen
    Definition in einer js-Datei zur kompakteren JSON-Notation wechseln.

    --jahr;
    Nostradamus

    so oder sehr ähnlich würde ich es immer noch machen.

    Cü,

    Kai

    --
    Ash nazg durbatulûk, ash nazg gimbatul,ash nazg thrakatulûk, agh burzum-ishi krimpatul
    selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
    Mein Selfhtml-Kram