JSON von PHP nach JavaScript zurückgeben?

135

Ich habe ein PHP-Skript, das über jQuery AJAX aufgerufen wird. Ich möchte, dass das PHP-Skript die Daten im JSON-Format an das Javascript zurückgibt. Hier ist der Pseudocode im PHP-Skript:

$json = "{";
foreach($result as $addr)
{
    foreach($addr as $line)
    {
        $json .= $line . "\n";
    }
    $json .= "\n\n";
}
$json .= "}";

Grundsätzlich brauche ich die Ergebnisse der beiden, damit Schleifen in $ json eingefügt werden.

AquinasTub
quelle

Antworten:

194

PHP verfügt über eine integrierte JSON-Serialisierungsfunktion.

json_encode

json_encode

Bitte verwenden Sie das, wenn Sie das Not Invented Here-Syndrom haben können und nicht.

Kent Fredric
quelle
2
Ausgezeichnet, vielen Dank. Ich hatte dies tatsächlich nachgeschlagen, bevor ich auf SO gepostet habe, aber ich dachte nicht, dass es auf meinem Hosting verfügbar sein würde.
AquinasTub
Diese 'Antwort' ist nicht vollständig und eher unbrauchbar. Weitere Informationen finden Sie in der Antwort von aesede.
Funk Doc
@FunkDoc Das fragliche OP reihte JSON von Hand aneinander, unter der Annahme, dass dies ihre einzige Wahl war. Zu wissen, dass dies nicht ihre einzige Wahl war, war eine geeignete Lösung. Es besteht keine Verpflichtung, dass das Endergebnis dieses JSON als HTTP-Antwort ausgegeben wird. Die Informationen zum Hinzufügen eines Headers sind zwar für eine Situation nützlich, helfen Ihnen jedoch nicht, wenn das, was Sie mit diesem JSON tun, nicht einfach "wörtlich auf die Webseite zurücksendet". Die Frage fügte dem Anwendungsfall keine Klarstellung hinzu.
Kent Fredric
(Außerdem ist das Setzen des Headers für AJAX nicht unbedingt erforderlich. Entschuldigung, wenn ich abrupt erscheine, aber der Schatten, den das Wort "Antwort" in Anführungszeichen gibt, hat mich wirklich nur aufgewickelt, es war vor 10 Jahren, lass es schon sterben. Ich bin vor so langer Zeit von PHP weggegangen, dass die Sprache, in die ich gewechselt bin, jetzt auch weg ist.)
Kent Fredric
145

In den vorherigen Antworten fehlen einige Dinge:

  1. Stellen Sie den Header in Ihrem PHP ein:

    header('Content-type: application/json');
    echo json_encode($array);
  2. json_encode()kann ein JavaScript- Array anstelle eines JavaScript- Objekts zurückgeben , siehe:
    Zurückgeben von JSON aus einem PHP-Skript
    Dies kann in einigen Fällen wichtig sein, da Arrays und Objekte nicht identisch sind.

aesede
quelle
2
Es ist wichtig zu beachten , dass die Daten Echo ed statt Rückkehr ed! Das hat mich eine Weile gebissen, als ich das Konzept zum ersten Mal lernte. Da in der allgemeinen Programmierung fast alles normalerweise nicht "gedruckt" zurückgegeben wird.
Juha Untinen
Hey @Juha, denk daran, dass json_encode()(wie alle Funktionen) immer etwas (einschließlich NULL) zurückgegeben wird; Sie können die Daten drucken, verarbeiten und dann drucken, sie einer Variablen zur späteren Verwendung zuordnen, sie in einer Datei speichern usw. Weitere Informationen finden Sie returnin PHP: Rückgabe von Werten . Sie können (und sollten!) Überprüfen, ob jede Funktion, die Sie nicht kennen, zurückgegeben wird. Weitere Informationen finden Sie in unserem Beispiel json_encode (), in dem angegeben wird, dass bei Erfolg eine JSON-codierte Zeichenfolge oder bei einem Fehler FALSE zurückgegeben wird.
Aesede
Damals habe ich mich gefragt, warum return json_encode($jsonArray);es nicht funktioniert hat (AngularJS http.get hat nichts bekommen), bis ich es später bemerkte :)
Juha Untinen
83

Es gibt einen JSON-Abschnitt in der PHP-Dokumentation. Sie benötigen jedoch PHP 5.2.0.

Ab PHP 5.2.0 wird die JSON-Erweiterung standardmäßig gebündelt und in PHP kompiliert.

Wenn Sie dies nicht tun, finden Sie hier die PECL-Bibliothek, die Sie installieren können.

<?php
    $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);

    echo json_encode($arr); // {"a":1,"b":2,"c":3,"d":4,"e":5}
?>
Ólafur Waage
quelle
13

Normalerweise wären Sie daran interessiert, Ihre Daten auch auf der Empfangsseite zu strukturieren:

json_encode($result)

Dadurch bleiben auch die Array-Schlüssel erhalten.

Denken Sie daran, dass json_encode nur mit utf8-codierten Daten funktioniert.

Jukka Dahlbom
quelle
4

Sie können Simple JSON für PHP verwenden . Es sendet die Header, die Ihnen helfen, den JSON zu fälschen.

Es sieht aus wie :

<?php
// Include the json class
include('includes/json.php');

// Then create the PHP-Json Object to suits your needs

// Set a variable ; var name = {}
$Json = new json('var', 'name'); 
// Fire a callback ; callback({});
$Json = new json('callback', 'name'); 
// Just send a raw JSON ; {}
$Json = new json();

// Build data
$object = new stdClass();
$object->test = 'OK';
$arraytest = array('1','2','3');
$jsonOnly = '{"Hello" : "darling"}';

// Add some content
$Json->add('width', '565px');
$Json->add('You are logged IN');
$Json->add('An_Object', $object);
$Json->add("An_Array",$arraytest);
$Json->add("A_Json",$jsonOnly);

// Finally, send the JSON.

$Json->send();
?>
Alexis Paques
quelle
Warnung: Simple JSON für PHP ist GPLv2-lizenziert, daher muss Ihr eigener Code Open Source sein, um ihn verwenden zu können.
Jamie Birch
1
Jetzt MIT Lizenz :)
Alexis Paques
1
@ JamieBirch In der Praxis denke ich, dass Sie falsch verstehen, wie GPL funktioniert. Wenn Sie über AGPL sprechen würden, wären Sie auf etwas fixiert. Aber große Estriche im Internet basieren auf GPL-Software und sind nicht verpflichtet, ihren Code zu öffnen, da sie den Benutzern keine ausführbare Datei unter ihrer Kontrolle geben, sondern nur eine Schnittstelle dazu bereitstellen. Die einzige Verpflichtung, die sie haben, besteht darin, dass jedem, dem sie digitale Kopien des Projekts geben, auch eine Quelle angegeben werden muss.
Kent Fredric
1

$ msg = "Sie geben einen falschen Benutzernamen oder ein falsches Passwort ein"; $ responso = json_encode ($ msg);

echo "{\"status\" : \"400\", \"responce\" : \"603\", \"message\" : \"You Enter Wrong Username OR Password\", \"feed\":".str_replace("<p>","",$responso). "}";
iamasp
quelle