JMSSerializerBundle和Symfony 2-将Doctrine/ODM输出到JSON文件


JMSSerializerBundle and Symfony 2 - Output Doctrine/ODM to JSON file

我正在尝试检索所有记录并将它们显示在JSON文件中。

我当前的函数检索属于特定用户的所有事件。

/**
 * create json files from doctrine/mongo
 * @Route("/createjson", name="createjson")
 */
public function createJson()
{
    // check user authentication
    $this->denyAccessUnlessGranted('ROLE_USER', null, 'Unable to access this page!');
    $dm = $this->get('doctrine_mongodb')->getManager();
    $repository = $dm->getRepository('AppBundle:Event');
    $events = $repository->findBy(array('user' => $this->getUser()));
    $serializer = SerializerBuilder::create()->build();
    $result = $serializer->deserialize($events, 'AppBundle'Document'Event', 'json');
    var_dump($result);
    exit;
}

这不起作用,因为传递到序列化程序的某些元素是数组格式的。我得到错误。

Warning: json_decode() expects parameter 1 to be string, array given
500 Internal Server Error - ContextErrorException

然而,如果我使用内置的Symfony序列化程序,它可以很好地工作:

    $serializer = $this->container->get('serializer');
    $reports = $serializer->serialize($events, 'json');
    return new Response($reports);

然而,要生成的JSON将与我的文档/实体不同,因此我希望/需要使用JMSSerializerBundle。

例如,一条记录如下:

[{
    "id": "572041b3288b560e5e00451c",
    "name": "Test",
    "date": "2016-04-27T05:25:00+1000",
    "enddate": "2016-04-30T11:55:00+1000",
    "location": {
        "name": "Sydney, NSW"
    },
    "key": {
        "id": "1g43g34g34g23f32g32G32gGSDF"
    },
    "user": {
        "id": "57203174288b560e5e0044da"
    }, ...
}]

但我只想显示(输出)到JSON

[{
    "id": "572041b3288b560e5e00451c",
    "name": "Test",
    "date": "2016-04-27T05:25:00+1000",
    "location": "Sydney, NSW"
}]

我该怎么做?关于JMSSerializerBundle的在线文档并不多。

编辑:我应该提到,我正在查询的数据库集合与由FOSUserBundle管理的User集合有关系。我不确定这是否与我的问题有关,但是

您应该查看捆绑包的文档,可能会发现更多信息http://jmsyst.com/bundles/JMSSerializerBundle

http://jmsyst.com/libs/serializer/master/usage

您似乎使用了错误的序列化程序函数。在您的情况下,您似乎需要从用户对象中获取json,因此需要使用

$serializer = SerializerBuilder::create()->build();
$result = $serializer->serialize($events, 'AppBundle'Document'Event', 'json');

serialize($object):string:从对象中获取字符串

deserialize($string):object:从对象(json,xml…)的表示中获取对象。