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

时间:2016-05-11 14:41:04

标签: php json slim slim-3

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

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

2 个答案:

答案 0 :(得分:6)

据Slim 3文档报道:

  

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

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

例如:

Content-Type: application/json

答案 1 :(得分:0)

似乎问题出在您从客户端获取的数据中。在这种情况下,您将收到一种var_dumpvar_export输出作为用户。根据您收到的数据,我会在您的客户端代码中搜索这样的内容:

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

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