我有一个小问题。也许有人有个主意。
我以下列方式使用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;
答案 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"