Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Objekt in JSON auslesen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Objekt in JSON auslesen

    Hallo erstmal,
    ich brauche hilfe Ich bin ein bisschen am verzweifeln. Habe bis jetzt mit JSON noch nichts gemacht.
    Und ja, JSON auslesen, gibt es überall Anleitungen, trotzdem bekomm ich es nicht hin, dass es so funktioniert wie ich das möchte.

    Ich encode mit PHP Daten aus meiner DB, und wollte sie jetzt mit Ajax/JS auslesen. Folgende Strutkur bekomm ich zurück.:
    Code:
    {
        "1": {
            "adressen_id": "1",
            "adressen_name": "Kunde1"
        },
        "2": {
            "adressen_id": "2",
            "adressen_name": "Kunde2"
        },
        "3": {
            "adressen_id": "3",
            "adressen_name": "WichtigerKunde"
        }
    }
    Das hab ich bis jetzt:
    PHP-Code:
    ...
    success: function(msg)
    {
    var 
    newText JSON.stringify(msg);
    Kunden JSON.parse(newText);
    console.log(Object.keys(Kunden));  //Ergebnis:  ["1", "2", "3"]

    for(i=0;i<Object.keys(Kunden).length;i++)
    {
       
    console.log(Object.keys(Kunden)[i]); //Ergebnis sind die 1,2,3, erwartungsgemäß

    Versuche ich jetzt allerdings mit:
    Object.keys(Kunden)[i].adressen_id;
    darauf zuzugreifen, schlägt es fehl. Ich versteh einfach nicht wie ich auf die Daten zugreifen kann =(

    Vielleicht kann jemand einen Denkanstoß geben


  • #2
    Code:
    Object.keys(Kunden)[i].adressen_id;
    Was versprichst du dir von Object.keys? Das gibt dir wie der Name schon sagt nur die Keys zurück, die darin Existieren. Wenn du die Daten aus dem Object ziehen willst solltest du auch auf dem richtigen Object (Kunden) arbeiten.
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      Hi,
      mit dem Objekt Kunden hatte ich vorher rumprobiert, bin nach einigem Suchen auf Object.Keys gestoßen, bin damit auch weiter gekommen als mit dem reinen Kunden Objekt.
      Denn, Kunden[i].adressen_name funktioniert auch nicht. Steh leider auf'm Schlauch.

      Kommentar


      • #4
        Zitat von junichs Beitrag anzeigen
        Hi,
        mit dem Objekt Kunden hatte ich vorher rumprobiert, bin nach einigem Suchen auf Object.Keys gestoßen, bin damit auch weiter gekommen als mit dem reinen Kunden Objekt.
        Denn, Kunden[i].adressen_name funktioniert auch nicht. Steh leider auf'm Schlauch.
        Hi junichs,

        mit kunden[index]["array_key"] sollte es doch eigentlich gehen:

        PHP-Code:
        <?php
        /*
        * Ein Abfrageergebnis aus DB
        */
        $kunden = array(array("adressen_id" => 1"adressen_name" => "Kunde1"),
                                array(
        "adressen_id" => 2"adressen_name" => "Kunde2"),
                                        array(
        "adressen_id" => 3"adressen_name" => "WichtigerKunde"));

        ?>
        <!DOCTYPE HTML>
        <html>
        <head>
        <title>Untitled</title>
        <!-- Pfade zu den jQuery/jQuery-ui Dateien -->
        <script src="jquery_ui/js/jquery-1.10.2.js" type="text/javascript"></script>
        <script type="text/javascript">
        <!--
        /*
        * DB-Abfrage via json an JS übergeben
        */
        var kunden = <?php echo json_encode($kunden);?>;
        // -->
        </script>
        </head>
        <body>
        <script type="text/javascript">
        <!--
        var index = 0;
        var kunden_daten = "<ol>";
        $(document).ready(function(){ 
         $.each(kunden, function(){
          kunden_daten = kunden_daten + "<li>Adress_ID: " + kunden[index]["adressen_id"] + " Adress_Name: " + kunden[index]["adressen_name"] + "</li>";
            index++;  
         });
         kunden_daten = kunden_daten + "</ol>";
         document.getElementById("kunde").innerHTML = kunden_daten;
        });
        // -->
        </script>
        <div id = "kunde"></div>
        </body>
        </html>


        Gruß
        Günni

        Kommentar


        • #5
          Leider funktioniert es immernoch nicht, da er mir sagt das Kunden[index] undefiniert sei. Bis jetzt sieht es so aus:
          PHP-Code:
          ...
          dataType "json",
          success: function(msg)
          {
               var 
          newText JSON.stringify(msg);
               var 
          Kunden JSON.parse(newText);

               var 
          index 0;

               $.
          each(Kunden, function()
               {
                 
          console.log"Adress_ID: " Kunden[index]["adressen_id"] + " Adress_Name: " Kunden[index]["adressen_name"]);
                    
          index++;
                });

          Kommentar


          • #6
            Gib doch ein Array aus Objekten aus PHP zurück. Also sowas:

            PHP-Code:
            {
                
            "success" true,
                
            "data" : [
                    {
                        
            "id"1,
                        
            "name""Kunde1"
                    
            },
                    {
                        
            "id"3,
                        
            "name""Kunde2"
                    
            }
                ]

            Sofern da valides json rüberkommt, solltest du so oder so ähnlich auf die Daten zugreifen können (ungetestet):
            PHP-Code:
            success : function(response) {
                if( ! 
            response || ! response.success ) {
                    throw new 
            Error'oops.' )
                }
                
                var 
            0,
                    
            response.data.length,
                    
            customer;
                    
                if( 
            ) {
                    return;
                }
                
                for( ; !! ( 
            customer response.data] ); i++ ) {
                    
            console.dircustomer );
                }

            P.S.: In Javascript solltest du aufpassen, wann du mit einer Referenz auf ein Objekt arbeitest (siehe jQuery.extend).

            Grüße

            Basti
            I like cooking my family and my pets.
            Use commas. Don't be a psycho.
            Blog - CoverflowJS

            Kommentar


            • #7
              Ich hole ja nur die Daten aus der Datenbank, wobei ich ja keinen Einfluss darauf habe, was PHP mit der JSON Funktion daraus bastelt, oder doch?

              Kommentar


              • #8
                Zitat von junichs Beitrag anzeigen
                Ich hole ja nur die Daten aus der Datenbank, wobei ich ja keinen Einfluss darauf habe, was PHP mit der JSON Funktion daraus bastelt, oder doch?
                Hi,

                vielleicht ist es nur die falsche Funktion, die du nutzen willst. Oder nur das falsche Argument, dass du übergibst.

                Hier http://msdn.microsoft.com/de-de/libr...(v=vs.94).aspx steht z.B., dass JSON.stringify einen Java-Wert als Argument bekommt.

                Du aber fragst eine DB ab. Guck dir im Browser mal mein Beispiel im Quelltext an, was json_encode aus dem PHP-Array macht.


                Im folg. Script habe ich eine Tabelle abgefragt, das Ergebnis in einem Array abgelegt.

                Nachfolgend lässt sich der Inhalt problemlos in JS ausgeben, nachdem ich das PHP-Array mit json_encode an JS übergeben habe:

                PHP-Code:
                <?php
                $conn 
                = new PDO("mysql:host=localhost;dbname=test""guenni""guenni");
                $query "select * from tabelle2";
                $stmt $conn->prepare($query);
                $stmt->execute();
                while(
                $row $stmt->fetch(PDO::FETCH_ASSOC)){
                 
                $kunden[] = $row;
                }
                echo 
                "<pre>";
                print_r($kunden);
                ?>
                <!DOCTYPE HTML>
                <html>
                <head>
                <title>Untitled</title>
                <!-- Pfade zu den jQuery/jQuery-ui Dateien -->
                <script src="jquery_ui/js/jquery-1.10.2.js" type="text/javascript"></script>
                <script type="text/javascript">
                <!--
                /*
                * DB-Abfrage via json an JS übergeben
                */
                var kunden = <?php echo json_encode($kunden);?>;
                // -->
                </script>
                </head>
                <body>
                <script type="text/javascript">
                <!--
                var index = 0;
                var kunden_daten = "<ol>";
                $(document).ready(function(){ 
                 $.each(kunden, function(){
                  kunden_daten = kunden_daten + "<li>Kunden_ID: " + kunden[index]["id"] + " - Name: "
                     + kunden[index]["Nachname"] + " - Vorname: " + kunden[index]["Vorname"] + "</li>";
                    index++;  
                 });
                 kunden_daten = kunden_daten + "</ol>";
                 document.getElementById("kunde").innerHTML = kunden_daten;
                });
                // -->
                </script>
                <div id = "kunde"></div>
                </body>
                </html>
                Hilfreich wäre, wenn du mal mehr relevanten Code posten würdest: Struktur deiner DB-Tabelle, DB-Abfrage, anschließend deine JSON-Codierung etc. . . .

                - Guck dir auch hier den Quelltext im Browser an
                - Lass dir Variableninhalte ausgeben, um festzustellen, ob die Inhalte stimmen

                Gruß
                Günni

                Kommentar


                • #9
                  JSON.stringify brauchts doch hier gar nicht (Java != Javascript). Das Rendering ist auch suboptimal, anstelle von innerHTML wäre ein Dokumenten-Fragment oder eine Template-Engine geschickter.

                  PHP-Code:
                  $(function(){ 
                      
                      var 
                  $fragment = $( document.createDocumentFragment() );
                      
                      $.
                  each(kunden, function( ikunde ){
                          
                          
                  $fragment.append(
                              $( 
                  '<li>', { 'class' 'customer' })
                                  .
                  textkunde.Nachname ' ' kunde.Vorname )
                          );
                          
                      });
                      
                      $( 
                  '#selector' )
                          .
                  append$fragment );
                      
                  }); 
                  wobei ich ja keinen Einfluss darauf habe, was PHP mit der JSON Funktion daraus bastelt, oder doch?
                  Probiers doch einfach mal aus oder schau in der Doku nach.
                  I like cooking my family and my pets.
                  Use commas. Don't be a psycho.
                  Blog - CoverflowJS

                  Kommentar


                  • #10
                    ok, habe Mist gemacht =(
                    Kommt davon, wenn man Funktionen von anderen nutzt.

                    Hab mir das Array jetzt selbst zusammen gebastelt und dann geht das auch ganz einfach mit dem Code von Günni
                    Man kann sich das Leben auch schwer machen -_-

                    Danke für die Mühen und Hinweise.

                    @rudygotya: ich benutzt CreateElement breits, hab ich im Code jetzt nicht mit drin gehabt, da es ja nicht mit dem eigentlichen Problem zu tun hat. Wobei mir jetzt nicht der so wirklich der Vorteil von createDocumentFragment klar ist.

                    @stringify:
                    Wenn ich es den Befehl weglasse, bekomm ich:
                    SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data
                    var Kunden = JSON.parse(msg);
                    Da es mit stringify geht, belasse ich es dabei

                    Kommentar


                    • #11
                      Zitat von junichs Beitrag anzeigen
                      @stringify:
                      Wenn ich es den Befehl weglasse, bekomm ich:

                      Da es mit stringify geht, belasse ich es dabei
                      Du encodest mit stringify ein Object zu einem JSON-String und mit parse wieder zurück zu einem object. Das ist unnötig. Du kannst das stringify UND das parse weglassen. Dadurch dass du als Datentyp "json" angegeben hast wird jQuery den Response selbstständig parsen, sodass du in deiner success-Funktion bereits das geparste Object übergeben bekommst.
                      Zitat von nikosch
                      Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                      Kommentar


                      • #12
                        aaahh ok, danke.

                        Hab's jetzt weggelassen.

                        Kommentar

                        Lädt...
                        X