2010-12-22 3 views
4

Ich versuche, ein JSON-Objekt aus MySQL-Ergebnissen zu erstellen, aber nicht das Ergebnis, das ich brauche. HierZurückgeben eines JSON-Objekts mit PHP json_encode() & MySQL an jQuery-Funktion übergeben

ist die PHP

$json = array(); 
$result = mysqli_query ($connection, $query); 
    echo '['; 

     while($row = mysqli_fetch_array ($result))  
     { 
      echo '{'; 
      echo '"latitude":"'.$row['lat'].'",'; 
      echo '"longitude":"'.$row['lng'].'",'; 
      echo '"icon":'.'"./images/'.$row['busColor'].'.png"'; 
      echo '}';  
     } 
     echo ']'; 

     $jsonstring = json_encode($json); 
     echo $jsonstring; 

     die(); 

Es gibt dieses

[{"latitude":"39.976257","longitude":"-83.003464","icon":"./images/pink.png"}][] 

Aber ich will diese

[{"latitude":"39.976257","longitude":"-83.003464","icon":"./images/pink.png"}] 

sobald ich das Ergebnis, das ich muss passieren, das Objekt zu einem jQuery-Plugin-Funktion, wenn das einen Unterschied macht

$.getJSON('myJsonURL, function(myMarkers){ 
    $("#map").goMap({ 
    markers: myMarkers 
    }); 
}); 

Dank

Antwort

21

ich die richtige Art und Weise denke, dies zu tun wäre:

$json = array(); 
$result = mysqli_query ($connection, $query); 
while($row = mysqli_fetch_array ($result))  
{ 
    $bus = array(
     'latitude' => $row['lat'], 
     'longitude' => $row['lng'], 
     'icon' => './images/' . $row['busColor'] . '.png' 
    ); 
    array_push($json, $bus); 
} 

$jsonstring = json_encode($json); 
echo $jsonstring; 

die(); 
+0

Das funktioniert perfekt und zeigt, wie man das macht, was David erklärt. Die Ausgabe sieht folgendermaßen aus: '{{" Breite ":" 39.992989 "," Länge ":" - 249.090057 "," Symbol ":". \/Images \ /pink.png "}'. Also json_encode entkommt automatisch den Schrägstrichen? Gibt es eine Möglichkeit, dies zu unterdrücken? Ich muss nicht, aber nur neugierig. – JCam

+0

Ja, die Schrägstriche werden standardmäßig hinzugefügt. Du könntest 'urlencode ('./ images /')' und den 'urldecode (json_encode ($ json))' '- aber das ist irgendwie chaotisch! – RabidFire

4

Sie beginnen, indem ein Array definieren.

Sie generieren dann einige JSON manuell.

Anschließend konvertieren Sie das Array in JSON und geben es aus.

Ersetzen Sie alle Echoanweisungen in und an der Kante Ihrer while-Schleife durch Code, um ein assoziatives Array mit den Daten zu generieren, und fügen Sie es dann in $ json ein.

+0

ich wohl diesen Weg, bu gehen sollte t Ich bin ein relativer Noob mit PHP, also ging ich für jetzt den einfacheren Weg. Zumal es in meinem Stadtteil 3:43 Uhr ist. Danke für die Information. +1 – JCam

+0

Das * ist * der leichtere Weg. Das Zusammenschlagen von Strings generiert früher oder später ungültige JSONs. – Quentin

+0

Ich dachte mir so viel, aber ich war auf der Suche nach einer schnellen und dreckigen Lösung, nachdem ich eine Weile daran gehackt hatte. Ich habe anhand des Beispiels @RabidFire auf Ihre Methode zurückgegriffen. – JCam

6

Sie Ihre json von Hand ausgegeben und dann rufen Sie json_encode auf ein leeres Array() - $ json

json_encode() Ausgänge [] auf ein leeres Array übergeben, damit Ihre letzte [] kommt von hier
$jsonstring = json_encode($json);
echo $jsonstring;

Edit: Mehr über json_encode json_encode php manual

+0

@OctoPaul Ich ging diesen Weg, da es der Weg des geringsten Widerstands für mich war. Ich habe das letzte 'echo' in 'echo'}, '; 'geändert, weil JSLint die Syntax nicht mochte. Ich bekomme ein zusätzliches Komma vor dem schließenden ']', aber jQuery analysiert es trotzdem. – JCam

+0

Schauen Sie sich die anderen zwei Antworten an, es ist besser, alle Ihre Daten in ein Array zu setzen und json_encode auf diesem Array aufzurufen - so wird Ihr json gültig sein – cristian

+0

Danke Paul, ich habe die richtige Antwort aktualisiert. Deine Methode hat mich dahin gebracht, wo ich hin wollte, also ist es immer noch eine gültige Antwort. – JCam