web-dev-qa-db-fra.com

PHP: file_get_contents ('php: // input') retournant une chaîne pour un message JSON

J'essaie de lire un message JSON dans mon application PHP et voici mon code php:

$json = file_get_contents('php://input');
$obj = json_decode($json, TRUE);
echo $obj->{'S3URL'};

Lorsque je fais cela, j'obtiens l'erreur suivante:

Trying to get property of non-object in setImage.php on line 25 (line 25 is the echo $obj->{'S3URL'}; line)

Voici le corps de la requête de la requête vers la page:

Request Url: http://localhost:8888/setImage.php
Request Method: POST
Status Code: 200
Params: {
   "S3URL": "http://url.com"
}

Voici les en-têtes de la requête:

Accept: application/json
Content-Type: application/json
Connection: keep-alive
Origin: chrome-extension: //rest-console-id
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML,

Cependant, si au lieu de cela je répète la variable $json, j'obtiens ce qui suit:

S3URL=http%3A%2F%2Furl.com

Donc, il semble que file_get_contents('php://input'); le lit en tant que chaîne, et non en JSON, ce qui rendra son analyse plus difficile.

Avez-vous une idée de la raison pour laquelle il n’est pas renvoyé en tant que JSON, ou comment puis-je le faire retourner en JSON?

7
Dave Moz

Votre utilisation de json_decode crée un tableau associatif, pas un objet. Vous pouvez le traiter comme un tableau, au lieu d'un objet. Si vous voulez un objet, utilisez ceci à la place:

$obj = json_decode($json);

Voir la documentation sur le deuxième paramètre à json_decode()

assoc Lorsque la valeur est TRUE, les objets renvoyés sont convertis en tableaux associatifs.

En outre, comme l'a souligné Johannes H. dans les commentaires, le résultat de echo $json; indique que vous ne recevez pas réellement de code JSON, vous devez donc également y remédier. Vous avez demandé pourquoi ce n'est pas JSON; sans voir comment vous demandez ce script, il est impossible de le dire avec certitude.

5
Ed Cottrell

Utilisez ce résultat sera 

$chd = json_decode(file_get_contents('php://input'), TRUE);
$childs = implode("",$chd);
0
Ratanveer Singh

Le problème peut être de la forme php: // input (est un flux en lecture seule qui vous permet de lire des données brutes à partir du corps de la requête).

0
Prithabai R

$ obj = json_decode ($ json);

Il suffit d'enlever le vrai

0
ramin