如何在Symfony2中将JSON转换为PHP对象?

6
通过jquery,我使用ajax/POST方式传输这个JSON。
{"indices":[1,2,6]}:

转换为Symfony2操作。目前我只关心数组,所以如果这样做可以使事情变得更容易,我也可以发布[1,2,6]。

如何将此转换为PHP对象?


不知何故,这不起作用:

/**
 * @Route("/admin/page/applySortIndex", name="page_applysortindex")
 * @Method("post")
 * @Template()
 */
public function applySortIndexAction()
{
    $request = $this->getRequest();
    $j = json_decode($request->request->get('json'));
    $indices = $j->indices;
    return array('data'=> $indices);
}

提示:在.../PageController.php第64行尝试获取非对象属性(500内部服务器错误)。

问题出在我访问$j->indices时,$j似乎为空。


发帖者:

$.ajax({
      type: 'POST',
      url: "{{ path('page_applysortindex')}}",
      data: $.toJSON({indices: newOrder}),
      success: ...

我猜你没有把“json”作为这个POST参数的名称。 - Raffael
我并没有主动使用任何名称,我将在上面发布js代码... - Jan
啊,所以我必须写数据:"data=" + $.toJSON({indices: newOrder}),一切都好了。可能有更好的解决方案。 - Jan
你发送了一个POST请求,但是你在请求体中发送的JSON,请查看我的第三次编辑。 - Raffael
+1对于有趣的问题...我之前也在想那个问题。 - Raffael
1个回答

5
要获取通过请求体发送的数据,请使用以下方式:
$request = $this->getRequest();
$request->getContent();

检查输出,然后进行操作。但这将包含JSON。
(是的,已经测试过了。这将导致您的JSON)
从控制器内获取名称为“json”的POST参数:
$request = $this->getRequest();
$request->request->get('json');

请求对象


$j = json_decode('{"indices":[1,2,6]}');

var_dump($j);

导致:
object(stdClass)#1 (1) {
  ["indices"]=>
  array(3) {
    [0]=>
    int(1)
    [1]=>
    int(2)
    [2]=>
    int(6)
  }
}

非常感谢!如果你能问对了人,事情就会变得很容易 :) - Jan
1
啊,但是我怎样从请求中获取JSON呢? - Jan
我似乎仍然无法得到 JSON。我更新了我的问题以展示实际的方法... - Jan
1
$json = json_decode($request->getContent(), true); - true 参数将您的 JSON 解码为数组,而不是 stdObj。 - igorw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接