2

我正在使用 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 改变了很多东西。

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

4

2 回答 2

6

正如 Slim 3 文档所报道的:

JSON 请求使用 json_decode($input, true) 转换为关联数组。

所以 getParsedBody 绝对是要走的路。相反,您是否检查了客户设置的请求类型?应该是application/json为了让 Slim 请求对象对 raw body 做正确的解释。

例如:

Content-Type: application/json
于 2016-05-11T15:05:53.543 回答
0

似乎问题出在您从客户端获取的数据中。在这种情况下,您以用户身份接收某种var_dumpvar_export输出。根据您收到的数据,我会在您的客户端代码中搜索如下内容:

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

在服务器端,无法解析正文,因为它不是正确的 JSON 字符串。

于 2016-05-11T14:59:28.210 回答