簡體   English   中英

帶有序列化程序的 Symfony JsonResponse

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM