无法在PHP中解码POST JSON对象

时间:2018-03-14 10:05:04

标签: php json post

我在JSP中将带有JSON字符串的POST请求发送给PHP但是收到的JSON无法解码。

这是我的html文件:

<html><body>

<form name="frm" method=post action="http://www.test.com/get_json.php">

<input type=hidden id=test name=test>
<input type="submit" value="Submit">

</form>

</BODY></HTML>

<script>
var jsonObj = {
            "merchID": "0000", 
            "amount": "test"
        };

var jsonString = JSON.stringify(jsonObj);
document.getElementById('test').value = jsonString;
</script>

这是我的PHP文件:

<?php
    echo file_get_contents("php://input");
    $data = json_decode(file_get_contents("php://input"));
    echo $data['amount'];
?>

echo file_get_contents(&#34; php:// input&#34;); 的输出

  

DO =%7B%22merchID%22%3A%220000%22%2C%22amount%22%3A%22test%22%7D

这意味着JSON的目标已经成功收到。

这个问题有解决办法吗?

2 个答案:

答案 0 :(得分:2)

您没有使用纯JSON请求正文发送请求,而是发送常规的网址编码表单请求。如您的输出所示,请求正文包含表单编码字符串中的JSON字符串 。您需要首先对其进行URL解码,然后从中选择您的JSON字符串。幸运的是,PHP已经为您完成了这项工作,数据在$_POST

中可用
$data = json_decode($_POST['DO']);

答案 1 :(得分:0)

当你没有在<form method=post上指定不包含任何文件上传的enctype属性时,默认为application/x-www-form-urlencoded - 编码,当php收到application/x-www-form-urlencoded时 - 编码POST请求,它解析请求并将数据放在$_POST变量中,因为包含javascript的元素名称为“test”,您的json最终位于变量$_POST['test']中,因此这应该可行: json_decode($_POST['test']); - json_decode(file_get_contents("php://input"));无效的原因,包括php://输入中的数据为application/x-www-form-urlencoded - 编码,而不是json编码的事实。鉴于PHP已经在$ _POST变量中为你解码了它,你不需要手动解码,但如果你出于某种原因想要这样做,那么php有parse_str函数来解码{{ 1}} - 编码数据,所以你也可以这样做:

application/x-www-form-urlencoded