Symfony JsonResponse与Serializer

时间:2016-10-16 17:11:16

标签: php symfony

我有一个小问题。也许有人有个主意。

我以下列方式使用Serializer。函数json_encode应用两次的问题。

首先我打电话给$ serializer->序列化($ post,' json');

第二次在$ response-> setData();

所以,解码我需要两次调用函数。

有什么想法吗?

$encoders = [
    new JsonEncoder()
];
$normalizer = new ObjectNormalizer();
$normalizer->setCircularReferenceHandler(function ($object) {
    return $object->getId();
});
$normalizers = [$normalizer];
$serializer  = new Serializer($normalizers, $encoders);

$response = new JsonResponse();
$response->setData([
    'status' => true,
    'data'   => $serializer->serialize($post, 'json')
]);

return $response;

3 个答案:

答案 0 :(得分:6)

对象被编码两次,因为您使用了jsonresponse,而是使用简单的响应。另外,编码整个数据,而不仅仅是其中的一部分。例如:

$responseData = [
    'status' => true,
    'data'   => $post
];

$response = new Response(
   $serializer->serialize($$responseData, 'json'),
   Response::HTTP_OK,
   ['Content-type' => 'application/json']
);

return $response:

希望这个帮助

答案 1 :(得分:0)

要返回json string而不是array,请使用JsonResponse::fromJsonString方法:

return JsonResponse::fromJsonString($serializer->serialize($data, 'json'));

答案 2 :(得分:0)

这是一个“纯粹的”symfony 答案,带有 JsonResponse 助手:

--query "[?properties.blobTier=='Cool'].properties.blobTier"