[英]Symfony JsonResponse with Serializer
我有一個小問題。 也許有人有一個想法。
我按以下方式使用序列化程序。 函數 json_encode 被應用兩次的問題。
首先當我調用 $serializer->serialize($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;
該對象被編碼兩次,因為您使用了 jsonresponse,請改用簡單的響應。 另外對整個數據進行編碼,而不僅僅是其中的一部分。 例如:
$responseData = [
'status' => true,
'data' => $post
];
$response = new Response(
$serializer->serialize($$responseData, 'json'),
Response::HTTP_OK,
['Content-type' => 'application/json']
);
return $response:
希望這有幫助
要返回 json string
而不是array
使用JsonResponse::fromJsonString
方法:
return JsonResponse::fromJsonString($serializer->serialize($data, 'json'));
這是一個“純”的 symfony 答案,帶有 JsonResponse 助手:
$doctors= $this->doctorsRepository->findBy_Name("dummy name"); // returns "Result" and NOT an "ArrayResult"
return new JsonResponse(
$serializer->serialize($doctors, 'json', [
ObjectNormalizer::GROUPS => ['for_importing_some_specific_fields']
]), // your serialized json but as a 'string' json
200, // equivalent code for Response::HTTP_OK (success)
[], // headers (by default it is application/json because of the Jsonresponse class)
true // already a json string so convert it to a json Object
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.