使用JSMSerializerBundle反序列化多维JSON API响应

4

我使用Symfony2/JSMSerializerBundle技术。将扁平的JSON对象序列化为PHP对象非常好用。但是我使用的API返回的是多维JSON响应:

{
"Webmessage": {
    "@version": "1.0",
    "Header": {
        "Country": "NL",
        "Language": "NL"
    },
    "Content": {
        "Filters": {
            "Sizes": {
                "Size": [
                    {
                        "@id": "241",
                        "#text": "3,5"
                    },
                    {
                        "@id": "55",
                        "#text": "36"
                    }
                ]
            },
            "Colours": {
                "Colour": [
                    {
                        "@id": "159",
                        "#text": "wit"
                    },
                    {
                        "@id": "54",
                        "#text": "zwart"
                    }
                ]
            }
        }
    }
}

作为反序列化的PHP,我希望能得到如下结果:
Array
(
[sizes] => Array
    (
      [0] => AppBundle\Entity\Filter Object
      (
        [id:AppBundle\Entity\Filter:private] => 1
        [text:AppBundle\Entity\Filter:private] => Heren
       )

      [1] => AppBundle\Entity\Filter Object
      (
        [id:AppBundle\Entity\Filter:private] => 2
        [text:AppBundle\Entity\Filter:private] => Dames
      )
    )

[colour] => Array
    (
      [0] => AppBundle\Entity\Filter Object
      (
        [id:AppBundle\Entity\Filter:private] =>56
        [text:AppBundle\Entity\Filter:private] => Black
       )

      [1] => AppBundle\Entity\Filter Object
      (
        [id:AppBundle\Entity\Filter:private] => 212
        [text:AppBundle\Entity\Filter:private] => Yellow
      )
    )

谁有提示可以帮我完成这个任务?

谢谢!


你尝试过使用 JMS 的 deserialize() 方法吗? - Pierre G.
1个回答

1
也许您可以先解码,然后使用规范化程序创建实体。类似于这样:
$array= json_decode($json, true);
$valueToDenormalize = $array['value'];

$normalizer = new GetSetMethodNormalizer();
$entity = $normalizer->denormalize($valueToDenormalize, 'Your\Class');

请注意,我没有尝试过这个。我不知道规范化器是否会以这种方式工作,但我知道它用于在数组和Symfony实体之间进行规范化和反规范化。
要进一步调查,您可以查看序列化器文档: http://symfony.com/doc/current/components/serializer.html 或规范化器: http://api.symfony.com/2.3/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.html 这是关于json_encode的一些内容: http://php.net/manual/en/function.json-decode.php

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接