2014-02-23 45 views
6

我想在我的PHP应用程序一个JSON消息来读取,这是我的PHP代码:PHP:的file_get_contents(“PHP://输入”)的JSON消息返回字符串

$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" 
} 

这是reques牛逼标题:

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任何想法?

+3

json_decode($ JSON,TRUE);返回数组不是对象。 –

+1

'php:// input'总是按原样提取请求主体。因此,如果您没有获取JSON代码,则不会发送JSON代码。期。由于有一个'='你得到的字符串中,形式最有可能被作为'应用程序/ x-WWW的形式urlencoded' –

+0

Abhik,是的,我试图消除TRUE,但仍然没有骰子。感谢Johannes H,我使用REST控制台来发送数据,并且从请求的内容头中看起来它应该将它作为JSON发送,但也许它不是? –

回答

5

您使用的json_decode是创建一个关联数组,而不是一个对象。你可以把它看作一个数组,而不是一个对象。在第二个参数

$obj = json_decode($json); 

See the documentationjson_decode():如果你想要一个对象,利用这一点,而不是

assoc When TRUE, returned objects will be converted into associative arrays.

而且,约翰内斯H.在评论中指出的,echo $json;输出指示你并没有真正接受JSON,所以你也需要解决这个问题。你问为什么它不是JSON;没有看到你如何要求这个脚本,这是不可能的。

+4

虽然正确,但这不是代码中唯一的问题。如果问题中提到'echo $ json;'输出'S3URL = http%3A%2F%2Furl.com',那么首先不会发送JSON。 –

+0

@JohannesH。好点子。 –

+0

正确的,即使删除“TRUE”也没有解决问题。我认为Johannes在这里是正确的。 –

-2

$ OBJ = json_decode($ JSON);

只需卸下真

0

该问题可能是形式的PHP://输入(是一个只读流,其可以读取从请求主体的原始数据)。 从php.ini更改一些设置,尝试使“allow_url_fopen”。