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

标签 php json symfony deserialization jmsserializerbundle

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

这里输出:

{
    "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 中的 Serializer 给我一个错误 ...

我遇到的错误:

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

我如何反序列化:

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

我怎样才能反序列化数据数组......要有一个帖子数组。我想给我的 View .twig 一个数组 Poste...我在反序列化时确实精确了类型...所以我找不到问题所在...

谢谢。

最佳答案

我认为这里最好的解决方案是创建新的 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,这在我看来是荒谬的。

关于php - Symfony - 将 json 反序列化为实体数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23051554/

相关文章:

mysql - Symfony2 多对多与 COUNT

php - 与 Symfony2.4 相比,Symfony2.5 的初始化时间较慢

php - 如何 $_GET 多个复选框值?

php - 为 php 和 mysql 数据更改中的表单选择值

javascript - 发送打印屏幕而不保存它

php - 数据库搜索错误中的 session 变量解析错误 : syntax error, 意外

java - org.springframework.http.converter.HttpMessageNotReadableException 调用休息后调用时

java - 添加一个列表到 Json ObjectNode

json - 使用 groovy 仅从 JSON 对象中获取键

Symfony2 Assetic 从 Controller 内部获取 Assets URL,而不是模板