PHP未从改造中获取发送的JSON值

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 {

我使用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 {
 ...
 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())