一尘不染

PHP:file_get_contents('php:// input')返回JSON消息的字符串

json

我正在尝试在我的PHP应用程序中读取JSON消息,这是我的php代码:

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

当我这样做时,出现以下错误:

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

这是页面请求的请求主体:

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

这是请求标头:

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,

但是,如果我改为回显$json变量,则会得到以下结果:

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

因此,看起来file_get_contents('php://input');是以字符串形式而不是以JSON形式读取它,这会使解析起来更加困难。

知道为什么它不以JSON形式返回,或者如何使它以JSON形式返回吗?


阅读 623

收藏
2020-07-27

共1个答案

一尘不染

您使用的json_decode是创建关联数组,而不是对象。您可以将其视为数组而不是对象。如果需要对象,请使用此对象:

$obj = json_decode($json);

请参阅有关第二个参数的文档json_decode()

assoc为TRUE时,返回的对象将转换为关联数组。

另外,正如Johannes H.在评论中指出的那样,输出echo $json;最初表明您实际上没有在接收JSON,因此您也需要解决该问题。您问为什么不是JSON?没有看到您如何请求此脚本,就无法确定地说。

2020-07-27