1

我无法从控制器操作返回正确的 json。

现在,我正在使用 jms 序列化程序来序列化一个实体。像这样:

$serializedJobOrders = $serializer->serialize($jobOrders, 'json');

所以我有一个我想返回的 json 字符串。它实际上是一个 json 对象数组:[{},{},{}]

之前,我只是在响应中使用了 setContent() 方法来返回 json。像这样:

$jsonResponse = new JsonResponse();
return $jsonResponse->setContent($serializer->serialize($jobOrders, 'json'));

但是,返回 json 数组存在安全问题。它应该是一个包含数组的对象。类似于 {data: [{},{},{}]}。不过,这就是我遇到麻烦的地方。

我不能这样做:

return new JsonResponse(array('data' => $serializedJobOrders));

因为这只会为“数据”属性创建一个转义字符串。然后我必须在客户端解析它。我认为这不是正确的做法。为了说明一下,这有点像:

{数据:“[{\u0022name\u0022:\u0022John\u0022},{\u0022name\u0022:\u0022John\u0022}]”}

如何返回正确的 json?所以它看起来像这样:

{data: [
  {'name': 'john'},
  {'name': 'john'},
  {'name': 'john'}
]}
4

1 回答 1

1

我不知道为什么,但在那之后我可以做类似的事情:

$data = array('data' => $jobOrders);
$serializedJobOrders = $serializer->serialize($data, 'json');
// then just use the setContent() method again
return $jsonResponse->setContent($serializedJobOrders);

我真的不知道为什么在我花时间问这个问题之后它才突然出现,doh :)

我想知道使用这样的 setContent() 方法是否不安全。好像有点“生”。

于 2013-04-28T22:59:59.740 回答