Question Renvoyer JSON à partir d'un script PHP


Je veux retourner JSON d'un script PHP.

Est-ce que je fais juste écho au résultat? Dois-je définir le Content-Type entête?


639
2017-10-31 18:23


origine


Réponses:


Bien que vous n'y soyez généralement pas habitué, vous pouvez et devez définir l'en-tête Content-Type:

<?PHP
$data = /** whatever you're serializing **/;
header('Content-Type: application/json');
echo json_encode($data);

Si je n'utilise pas un framework particulier, j'autorise généralement des params de requête à modifier le comportement de sortie. Il peut être utile, généralement pour un dépannage rapide, de ne pas envoyer d'en-tête, ou parfois d'imprimer print_r la charge utile de données (bien que dans la plupart des cas, cela ne soit pas nécessaire).


1168
2017-10-31 18:27



Un morceau complet de code PHP sympa et clair retournant JSON est:

$option = $_GET['option'];

if ( $option == 1 ) {
    $data = [ 'a', 'b', 'c' ];
    // will encode to JSON array: ["a","b","c"]
    // accessed as example in JavaScript like: result[1] (returns "b")
} else {
    $data = [ 'name' => 'God', 'age' => -1 ];
    // will encode to JSON object: {"name":"God","age":-1}  
    // accessed as example in JavaScript like: result.name or result['name'] (returns "God")
}

header('Content-type: application/json');
echo json_encode( $data );

97
2017-07-31 15:26



Essayer json_encode pour encoder les données et définir le type de contenu avec header('Content-type: application/json');.


33
2017-10-31 18:27



Selon le manuel sur json_encode la méthode peut renvoyer une non-chaîne (faux):

Retourne une chaîne codée JSON en cas de succès ou FALSE en cas d'échec

Quand cela arrive echo json_encode($data) sortira la chaîne vide, qui est JSON invalide.

json_encode va par exemple échouer (et retourner false) si son argument contient une chaîne non UTF-8.

Cette condition d'erreur devrait être capturée en PHP, par exemple comme ceci:

<?php
header("Content-Type: application/json");

// Collect what you need in the $data variable.

$json = json_encode($data);
if ($json === false) {
    // Avoid echo of empty string (which is invalid JSON), and
    // JSONify the error message instead:
    $json = json_encode(array("jsonError", json_last_error_msg()));
    if ($json === false) {
        // This should not happen, but we go all the way now:
        $json = '{"jsonError": "unknown"}';
    }
    // Set HTTP response status code to: 500 - Internal Server Error
    http_response_code(500);
}
echo $json;
?>

Ensuite, l'extrémité réceptrice devrait bien sûr être conscient que la présence de jsonError La propriété indique une condition d'erreur, qu'elle devrait traiter en conséquence.

En mode production, il peut être préférable d'envoyer uniquement un statut d'erreur générique au client et de consigner les messages d'erreur plus spécifiques pour une investigation ultérieure.

En savoir plus sur le traitement des erreurs JSON dans Documentation de PHP.


29
2018-02-14 11:56



Définir le type de contenu avec header('Content-type: application/json'); puis faites écho à vos données.


12
2017-10-31 18:26



Il est également bon de définir la sécurité d'accès - il suffit de remplacer * par le domaine que vous souhaitez pouvoir atteindre.

<?php
header('Access-Control-Allow-Origin: *');
header('Content-type: application/json');
    $response = array();
    $response[0] = array(
        'id' => '1',
        'value1'=> 'value1',
        'value2'=> 'value2'
    );

echo json_encode($response); 
?>

Voici plus d'exemples sur cela: comment contourner Access-Control-Allow-Origin? 


6
2018-06-13 21:48



La réponse à votre question est là,

Ça dit.

Le type de média MIME pour le texte JSON est   application / json.

Donc, si vous définissez l'en-tête à ce type, et affichez votre chaîne JSON, cela devrait fonctionner.


3
2017-10-31 18:26



Comme indiqué ci-dessus:

header('Content-Type: application/json');

fera le travail. mais gardez à l'esprit que:

  • Ajax n'aura aucun problème à lire json même si cet en-tête n'est pas utilisé, sauf si votre json contient des balises HTML. Dans ce cas, vous devez définir l'en-tête en tant qu'application / json.

  • Assurez-vous que votre fichier n'est pas encodé en UTF8-BOM. Ce format ajoute un caractère en haut du fichier, donc votre appel header () échouera.


2
2017-12-28 20:17



Ceci est un simple script PHP pour renvoyer un identifiant masculin et un identifiant utilisateur car la valeur json sera une valeur aléatoire lorsque vous appelez le script json.php.

J'espère que cette aide merci

<?php
header("Content-type: text/json");
$myObj=new \stdClass();
$myObj->user_id = rand(0, 10);
$myObj->male = rand(0, 5);
$myObj->female = rand(0, 5);
$myJSON = json_encode($myObj);
echo $myJSON;
?>

2
2017-09-12 02:16



Si vous avez besoin de json de php pour envoyer des informations personnalisées, vous pouvez ajouter ceci header('Content-Type: application/json'); avant d'imprimer toute autre chose, alors vous pouvez vous imprimer custome echo '{"monto": "'.$monto[0]->valor.'","moneda":"'.$moneda[0]->nombre.'","simbolo":"'.$moneda[0]->simbolo.'"}';


1
2017-10-29 13:57



Oui, vous devrez utiliser echo pour afficher la sortie. Mimetype: application / json


0
2017-10-31 18:26