Ankündigung

Einklappen
Keine Ankündigung bisher.

JSON erzeugen

Einklappen

Neue Werbung 2019

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

  • JSON erzeugen

    müßte eigentlich ganz einfach sein ...

    Laut
    Ajax Autocomplete for jQuery

    soll ich so was erzeugen:
    Web page that provides data for Ajax Autocomplete, in our case autocomplete.ashx will receive GET request with querystring ?query=Li, and it must return JSON data in the following format:
    Code:
    {
     query:'Li',
     suggestions:['Liberia','Libyan Arab Jamahiriya','Liechtenstein','Lithuania'],
     data:['LR','LY','LI','LT']
    }
    wie mach ich das mit PHP ?

    so?
    PHP-Code:

    $my_data 
    "{
     query:'Li',
     suggestions:['Liberia','Libyan Arab Jamahiriya','Liechtenstein','Lithuania'],
     data:['LR','LY','LI','LT']
    } "
    ;

    echo 
    json_encode($my_data); 
    kanns ja wohl nicht sein oder ?

    oder so ?:
    PHP-Code:
    // ohne data
    echo "query:'".$search."',""\n";
    echo 
    "suggestions: "json_encode($output), "\n"
    Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.


  • #2
    Nö, denn $my_data ist in dem Fall schon JSON, da genügt
    PHP-Code:
    echo $my_data
    Wahrscheinlicher ist es, dass Du die Daten in PHP zunächst als Array hast, dann wiederum geht es so:
    PHP-Code:
    $my_data = array('query'=>'Li''suggestions'=>array(/* ... */), /* ... */);
    echo 
    json_encode($my_data); 
    @fschmengler - @fschmengler - @schmengler
    PHP Blog - Magento Entwicklung - CSS Ribbon Generator

    Kommentar


    • #3
      thx -

      Da kommt bei mir jetzt folgendes raus:

      {"query":"Ro","suggestions":["Robert Pattinson","Robert Redford","Julia Roberts","Rosamund Pike","Robin Williams","Gena Rowlands","Roma Maffia","Rose McGowan","Seth Rogen","Rose Byrne","Robert Patrick","Eric Roberts","Linus Roache","Robert Peters","Robin Wright Penn"]}

      Scheint zu stimmen, wenn man von den doppelten statt einfachen Quotes mal absieht.

      Nuir funktioniert der Mist trotzdem nicht.
      Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

      Kommentar


      • #4
        Also die Spezifikation von JSON sieht aber doppelte Anführungszeichen vor! Heißt wenn die da einfache möchten, dann haben die einen Fehler und sie verwenden nicht das "offizielle" JSON Format!

        Kommentar


        • #5
          funktioniert - das mit den Quotes war ein Fehler in der Beschreibung.

          Hab noch ewig Fehler gesucht. Der GET-Parameter hat nicht die Bezeichnung
          des Inputfelds sondern man muß immer $_GET['query'] auswerten,
          unabhängig davon wie das Inputfeld heißt.

          Muß mir mal anschaun wie man bei jQuery richtig debuggt.
          Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

          Kommentar


          • #6
            Schöner finde ich es noch, wenn man in php dann gleich mit einer stdClass arbeitet, wenn auf JS Seite ein Objekt zurückkommt.
            Liest sich dann gleich eingänglicher.


            grüße
            I like cooking my family and my pets.
            Use commas. Don't be a psycho.
            Blog - CoverflowJS

            Kommentar


            • #7
              Also die Spezifikation von JSON sieht aber doppelte Anführungszeichen vor! Heißt wenn die da einfache möchten, dann haben die einen Fehler und sie verwenden nicht das "offizielle" JSON Format!
              Was? Das höre ich zum ersten mal. Das sollte bei JS doch egal sein. Es geht doch nur um den String als Schlüssel, oder? JS macht doch da keine Unterschiede.

              Hast Du nen Link?

              [edit]
              schon gefunden..
              --

              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


              --

              Kommentar


              • #8
                Auf diversen Seiten sieht man immer nur doppelte Anführungszeichen:
                JSON
                JSON - Wikipedia, the free encyclopedia

                Das RFC sagt "quotation marks", ich weiß nicht ob das auch single quotes mit einschließt.

                Und JS mag vlt. damit umgehen können, aber z.b. PHP kannst ein JSON Objekt nur dann "decoden" wenn es mit doppelten Anführungszeichen geschrieben ist, bei einfachen gibts immer nur "null" zurück.

                Kommentar


                • #9
                  Naja, PHP würde ich da nicht als Maß nehmen. 5 mal NULL:

                  PHP-Code:
                  <?php

                  var_dump 
                  (json_decode ('{test:test}'));
                  var_dump (json_decode ("{test:'test'}"));
                  var_dump (json_decode ("{'test':test}"));
                  var_dump (json_decode ('{"test":test}'));
                  var_dump (json_decode ('{test:"test"}'));
                  aber gut zu wissen.
                  --

                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                  --

                  Kommentar


                  • #10
                    Das sind aber auch alles ungültige JSON Objekte die du da geschrieben hast.

                    Quotes müssen immer da sein außer es ist nen integer oder true/false/null Literale.

                    Was ich getestet hab ist:
                    PHP-Code:
                    var_dump(json_decode("{'blub':'bla'}")); // geht nicht
                    var_dump(json_decode('{"blub":"bla"}')); // geht 

                    Kommentar


                    • #11
                      Hmm, dann ist das viell. das gleiche Problem. Im JS Objekt Notification (im eigentlichen Sinne) ist das finde ich sehr gebräuchlich *). Hat mich schon immer etwas gestört, weil hier schwer zwischen Strings und Variablen unterschieden werden kann.

                      *) Gerade im jQuery-Umfeld. Bspw. http://api.jquery.com/jQuery.extend/
                      http://aktuell.de.selfhtml.org/artik...en-und-kontext
                      --

                      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                      --

                      Kommentar


                      • #12
                        Wie meinst du das mit Variablen? So ein JSON Objekt besteht ja einer Menge von Objekteigenschaften, diese werden immer in " " angegeben (oder in JS gehts halt vlt. auch mit ' ').

                        Kommentar


                        • #13
                          oder in JS gehts halt vlt. auch mit ' '
                          Und auch ohne. Und auch mit Variablen.

                          PHP-Code:
                          <script>

                          var 
                          bar 'welt';

                          var 
                          foo = {
                             
                          'test' 'test'  ,
                              
                          hallo 'hallo' ,
                              
                          bar   bar
                          };

                          alert (foo.test foo.hallo foo.bar foo.welt); // testhalloweltundefined
                                                                             // selbst in IE6!
                          </script> 
                          --

                          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                          --

                          Kommentar


                          • #14
                            Mh das funktioniert dann denke ich aber nur weil die JS Engines in den Browsern so flexibel sind, kannst ja in html auch Attribute ohne " " schreiben usw.

                            Denn laut spezifikation müssen immer Anführungszeichen um die Variablen (links) und auch um deren Werte stehen (rechts). Außer die Werte sind eben selbst JSON Objekte, Arrays oder Integer bzw. Literale (true/false/null). Aber sonst IMMER Anführungszeichen ... alles andere funktioniert halt wohl nur weils die Browser erlauben.

                            Kommentar


                            • #15
                              Zitat von nikosch Beitrag anzeigen
                              PHP-Code:
                              <script>

                              var 
                              bar 'welt';

                              var 
                              foo = {
                                 
                              'test' 'test'  ,
                                  
                              hallo 'hallo' ,
                                  
                              bar   bar
                              };

                              alert (foo.test foo.hallo foo.bar foo.welt); // testhalloweltundefined
                                                                                 // selbst in IE6!
                              </script> 
                              Natürlich ist foo.welt undefined - denn wenn das erste bar zur Variablen bar aufgelöst werden würde, dann müsste ja auch für das hallo nach einer gleichnamigen Variablen gesucht werden.
                              Bei dieser Objekt-Notation gibst du nur Bezeichner an, keine „Referenzen“ auf andere Objekte.

                              Wenn du foo.welt mit einem Wert belegen willst, und der Bezeichner welt dabei aus der Variablen bar entnommen werden soll, dann musst du explizit foo[bar] = 'xyz' schreiben.
                              In der Kurzschreibweise ist das m.W. nicht mit unterzubringen.

                              Kommentar

                              Lädt...
                              X