Symfony - 将 json 反序列化为实体数组

我有一个json对象,我通过进行get API调用收到。我进行此调用以接收对象列表。这是一个帖子列表...所以我有一个Post Objects数组。

这里输出:

{
    "total":2,
    "data":[
      {
        "id":2,
        "user":{
          "id":1,
          "username":"sandro.tchikovani"             
        },
        "description":"cool",
        "nb_comments":0,
        "nb_likes":0,
        "date_creation":"2014-04-13T20:07:34-0700"
      },
      {
        "id":1,
        "user":{
           "id":1,
           "username":"sandro.tchikovani",
         },
        "description":"Premier pooooste #lol",
        "nb_comments":0,
        "nb_likes":0,
        "date_creation":"2014-04-13T15:15:35-0700"
      }
    ]
 }

我想反序列化数据部分...问题是Symfony中的序列化程序给了我一个错误...

我有的错误:

Class array<Moodress\Bundle\PosteBundle\Entity\Poste> does not exist

我如何反序列化:

$lastPosts = $serializer->deserialize($data['data'], 'array<Moodress\Bundle\PosteBundle\Entity\Poste>', 'json');

如何反序列化数据数组...拥有一系列帖子。我想给我的观点.twig一个数组Poste...我在反序列化时精确地键入了...所以我找不到问题是什么...

谢谢。


答案 1

我认为这里最好的解决方案是创建新的PosteResponse类,就像这样:

namespace Moodress\Bundle\PosteBundle\Response;

use JMS\Serializer\Annotation\Type;

class PosteResponse
{
    /**
     * @Type("integer")
     */
    private $total;

    /**
     * @Type("array<Moodress\Bundle\PosteBundle\Entity\Poste>")
     */
    private $data;

    //getters here
}

并反序列化您对该类的响应:

$response = $serializer->deserialize(
    $json,
    'Moodress\Bundle\PosteBundle\Response\PosteResponse',
    'json'
);
$posts = $response->getData();

这将解决问题,并且不需要您手动解码和编码json,这在我看来是荒谬的。


答案 2

因为要反序列化对象数组:Symfony Serializer Component 2.8

$persons = $serializer->deserialize($data, 'Acme\Person[]', 'json');

https://symfony.com/doc/master/components/serializer.html#handling-arrays


推荐