Renvoyer JSON de PHP à JavaScript?

135

J'ai un script PHP qui est appelé via jQuery AJAX. Je veux que le script PHP renvoie les données au format JSON au javascript. Voici le pseudo code dans le script PHP:

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

Fondamentalement, j'ai besoin que les résultats des deux boucles for soient insérés dans $ json.

AquinasTub
la source

Réponses:

194

Php a une fonction de sérialisation JSON intégrée.

json_encode

json_encode

Veuillez l' utiliser si vous pouvez et ne souffrez pas du syndrome de Not Invented Here.

Kent Fredric
la source
2
Excellent merci. J'avais en fait recherché cela avant de publier sur SO, mais je ne pensais pas que ce serait disponible sur mon hébergement.
AquinasTub
Cette «réponse» n'est pas complète et peu utile. Voir la réponse d'aesede pour des informations plus complètes.
Funk Doc
@FunkDoc l'OP en question enchaînait JSON à la main, sous l'hypothèse que c'était leur seul choix. Savoir que ce n'était pas leur seul choix était une solution appropriée. Il n'y a aucune obligation que le résultat final de ce JSON soit émis en tant que réponse HTTP. Les informations "ajouter un en-tête", bien qu'utiles pour une situation, ne vous aideront pas si ce que vous faites avec ce JSON n'est pas simplement "le renvoyer textuellement à la page Web". La question n'a pas clarifié le cas d'utilisation.
Kent Fredric
(De plus, la définition de l'en-tête n'est pas strictement nécessaire pour AJAX. Excusez-moi si je semble brusque, mais la nuance donnée par le mot «'réponse' 'entre guillemets m'a vraiment blessé, c'était il y a 10 ans, laissez-le mourir déjà. J'ai quitté PHP il y a si longtemps que la langue dans laquelle j'ai déménagé, je m'éloigne également .)
Kent Fredric
145

Voici quelques éléments manquants dans les réponses précédentes:

  1. Définissez l'en-tête dans votre PHP:

    header('Content-type: application/json');
    echo json_encode($array);
  2. json_encode()peut renvoyer un tableau JavaScript au lieu d'un objet JavaScript , voir:
    Renvoyer JSON à partir d'un script PHP
    Cela peut être important à savoir dans certains cas car les tableaux et les objets ne sont pas les mêmes.

aesede
la source
2
Cela m'a mordu pendant un bon moment lorsque j'ai appris le concept pour la première fois. Parce que dans la programmation générale, presque tout est généralement retourné non "imprimé".
Juha Untinen
Hey @Juha, gardez à l'esprit que json_encode()(comme toutes les fonctions) renvoie toujours quelque chose (y compris NULL); Vous pouvez également (et devriez!) Vérifier ce que renvoie chaque fonction que vous ne connaissez pas, voir notre exemple json_encode () it states Renvoie une chaîne codée JSON en cas de succès ou FALSE en cas d'échec. return
aesede
À l'époque, je me demandais pourquoi return json_encode($jsonArray);ne fonctionnait pas (AngularJS http.get n'a rien obtenu), jusqu'à ce que je le remarque plus tard :)
Juha Untinen
83

Il y a une section JSON dans la documentation PHP. Vous aurez cependant besoin de PHP 5.2.0.

Depuis PHP 5.2.0, l'extension JSON est intégrée et compilée en PHP par défaut.

Sinon, voici la bibliothèque PECL que vous pouvez installer.

<?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
la source
13

Habituellement, vous seriez intéressé à avoir également une certaine structure pour vos données à l'extrémité de réception:

json_encode($result)

Cela conservera également les clés du tableau.

N'oubliez pas que json_encode ne fonctionne que sur les données encodées en utf8.

Jukka Dahlbom
la source
4

Vous pouvez utiliser Simple JSON pour PHP . Il envoie les en-têtes vous aider à forger le JSON.

On dirait :

<?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
la source
Attention: Simple JSON pour PHP est sous licence GPLv2, donc votre propre code doit être open-source pour pouvoir l'utiliser.
Jamie Birch
1
Maintenant licence MIT :)
Alexis Paques
1
@JamieBirch En pratique, je pense que vous ne comprenez pas comment fonctionne la GPL. Si vous parliez d'AGPL, vous seriez sur quelque chose. Mais de vastes chapes d'Internet sont construites sur des logiciels GPL et ne sont pas obligées d'ouvrir leur code, car elles ne donnent aux utilisateurs aucun exécutable sous leur contrôle, mais ne leur fournissent qu'une interface. La seule obligation qu'ils ont est que toute personne à qui ils remettent des copies numériques du projet doit également en avoir la source.
Kent Fredric
1

$ msg = "Vous entrez un mauvais nom d'utilisateur OU mot de passe"; $ responso = json_encode ($ msg);

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