PHP未从改造中获取发送的JSON值
我使用POST请求将值PHP未从改造中获取发送的JSON值,php,json,kotlin,Php,Json,Kotlin,我使用POST请求将值user和id作为JSON值发送到服务器 在服务器上,我使用以下方法获取值: $data = file_get_contents('php://input'); $json = json_decode($data, true); if (array_key_exists('user', $json) && array_key_exists('id', $json)) { ... echo "received"; } else {
user
和id
作为JSON值发送到服务器
在服务器上,我使用以下方法获取值:
$data = file_get_contents('php://input');
$json = json_decode($data, true);
if (array_key_exists('user', $json) && array_key_exists('id', $json)) {
...
echo "received";
}
else {
...
echo "not received";
}
但它总是以“未收到”结尾
我尝试抛出新异常以查看$data
和$json
的值,我得到的结果如下:
Uncaught Exception: $data:"{\"user\":\"usr\",\"id\":\"0\"}"
Uncaught Exception: $json:{"user":"usr","id":"0"}
它应该会起作用,但出于某种奇怪的原因它不起作用
如果我替换$data=file\u get\u contents('php://input');代码>与$data=“{\'user\':\'usr\',\'id\':\'0\'”代码>,然后它就工作了
但是如果我替换$json=json\u decode($data,true)
与$json=“{'user':'usr','id':'0'}”代码>,那么它就不工作了
我还尝试在PhpStorm中运行此代码,它工作正常。我试着用它们的实际值替换$data
和$json
,它一直都能工作,就像它应该能工作一样
有人知道为什么它不能在服务器上工作吗
编辑:
科特林部分:
@Headers("Content-type:application/json")
@POST("user.php")
suspend fun getUsers(@Body body: String): List<User>
看起来你收到了一个JSON编码的JSON字符串?!也就是说,json\u decode(json\u decode($data),true)
可能有效吗?请链接改装文档。似乎有一些双重编码正在进行,因为$data
不应包含{\”
。此外,对于测试JSON字符串,只能使用双引号,单引号不是合法的JSON,这就是为什么“{user\u id':'testuid','page\u number':'0}“
不起作用fwiw,您的变量是向后命名的。您从php://input
是一个JSON字符串。当您解码它时,您拥有的是数据…@deceze这是一个品味问题。他/她从php://input 进入$data
,并有一个解码的“json”对象。我比你更喜欢它。
val jsonObject = JSONObject()
jsonObject.put("user", user)
jsonObject.put("id", "" + id)
val users = network.getUsers(jsonObject.toString())