Php Slim Framework v3,通过POST问题获取JSON数据

Php Slim Framework v3,通过POST问题获取JSON数据,php,json,slim,slim-3,Php,Json,Slim,Slim 3,我正在使用Slim Framework v3,在访问从浏览器客户端发送到REST API的JSON数据时遇到一些问题 目前我正在使用$request->getParsedBody()来访问数据,但它返回的只是一个字符串,我不想解析它,因为我认为有更好的解决方案来解决这个问题 以下是客户端发送的内容: $data = array (); $data ["key1"] = "value1"; $data ["key2"] = "value2"; $data ["key3"] = "value3";

我正在使用Slim Framework v3,在访问从浏览器客户端发送到REST API的JSON数据时遇到一些问题

目前我正在使用
$request->getParsedBody()
来访问数据,但它返回的只是一个字符串,我不想解析它,因为我认为有更好的解决方案来解决这个问题

以下是客户端发送的内容:

$data = array ();
$data ["key1"] = "value1";
$data ["key2"] = "value2";
$data ["key3"] = "value3";
$data = json_encode ( $data );
这将生成
{“key1”:“value1”、“key2”:“value2”、“key3”:“value3”}

服务器上发生了什么

$app->post ( '/somePath', function ($request, $response) {
    $body = $request->getParsedBody();
    var_dump($body);
    return $response;
});
var_dump()正在生成以下输出:

string(86) "array(1) {
  ["{"key1":"value1","key2":"value2","key3":"value3"}"]=>
  string(0) ""
}
"
如您所见,
$request->getParsedBody()正在返回一个字符串。
有没有更好的办法

我已经尝试使用
$request->getBody(),但它返回类型为Slim\Http\RequestBody的对象,并且只有受保护的变量。我还没有找到任何函数来访问这些受保护的变量

请记住,我使用的是Slim v3,它们与v2相比改变了很多


如果没有更好的方法,您有没有建议如何以最佳方式解析它?

问题似乎出在您从客户端获得的数据中。在本例中,您将作为用户接收一种
var\u转储
var\u导出
输出。根据您收到的数据,我会在您的客户代码中搜索类似的内容:

<?php var_export([json_encode($data) => '',],true);

正如Slim 3文档所报告的那样:

JSON请求通过JSON_decode($input,true)转换为关联数组

所以getParsedBody绝对是一条路要走。 相反,您是否检查了客户机设置的请求类型?它应该是
application/json
,以便使Slim请求对象正确解释原始主体

例如:


除了我已经发布的内容,我不会修改我客户机上的数据。我将它与:
curl\u setopt($curl,CURLOPT\u POSTFIELDS,$data)一起发送你能用客户端代码更新你的问题吗?在我看来,数据在某些方面正在被修改。另外,正如@LuigiPresello所说的,检查您发送的数据是否具有正确的内容类型标题(这将帮助框架更好地进行数据格式转换)。好的,输出看起来更好,但它仍然是一个字符串
string(115)“array(3){[“key1”]=>string(6)“value1”[“key2”]=>string(6)“value2”[“key3”]=>string(6) “value3”}“
你能发布结果字符串吗?更新了第一条注释不管怎样,我的错,我将请求发送到服务器,执行了
var\u dump()
,将其发送回客户端,然后再次执行
var\u dump()
。它现在正在工作。谢谢你听到这个消息。;)您需要使用以下内容类型发布数据:application/json header。
Content-Type: application/json