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

时间:2014-02-23 21:40:42

标签: php 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返回?

7 个答案:

答案 0 :(得分:5)

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

$obj = json_decode($json);

See the documentation关于json_decode()的第二个参数:

  

ASSOC   如果为TRUE,则返回的对象将转换为关联数组。

另外,正如Johannes H.在评论中指出的那样,echo $json;的输出表明你实际上并没有真正接收JSON,所以你也需要解决这个问题。你问为什么它不是JSON;没有看到你如何请求这个脚本,就不可能肯定地说。

答案 1 :(得分:0)

$ obj = json_decode($ json);

删除真正的

答案 2 :(得分:0)

问题可能是php:// input(是一个允许您从请求主体读取原始数据的只读流)。 从php.ini更改一些设置,尝试制作" allow_url_fopen"上。

答案 3 :(得分:0)

使用此结果将

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

答案 4 :(得分:0)

执行这种类型的请求有两种类型

首先:您可以将其用作stdClassObject

$ data = json_decode(file_get_contents('php:// input'));

它将返回一个对象,您可以像这样从中检索数据

$ name = $ data->名称;

第二:您可以将其用作数组

$ data = json_decode(file_get_contents('php:// input'),true);

它将返回一个对象,您可以像这样从中检索数据

$ name = $ data ['name'];

答案 5 :(得分:0)

尝试这个https://stackoverflow.com/a/56801419/7378998

它适用于JSON或jquery帖子

$.post(url, $('form').serialize());

答案 6 :(得分:0)

如果您使用JavaScript发送JSON,则将其发送到php文件

send_recieve.js

var myObject = JSON.stringify({"name":"John","age":30,"city":"New York"});
var xhr = new XMLHttpRequest();
xhr.open("POST","http://localhost/dashboard/iwplab/j-comp/receive_send.php",false);
xhr.setRequestHeader("Content-type","application/json");
xhr.onreadystatechange = function(){
    if(xhr.readyState==4){console.log("xhr response:"+xhr.response)}
    alert(xhr.responseText);
 };
 xhr.send(myObject);

receve_send.php

<?php
    $var = json_decode(file_get_contents("php://input"),true);
    echo "Data recieved by PHP file.\n";
    if ($var["name"]=="John"){
        echo "a";
    }
    else{
        echo "b";
    }
    //Manipulate/validate/store/retrieve to database here
    //echo statements work as response
    echo "\nSent";

?>

echo语句作为响应。