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

标签 json symfony json-deserialization jmsserializerbundle jms-serializer

我使用 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
      )
    )

)

谁有我如何做到这一点的提示?

谢谢!

最佳答案

也许您可以先对其进行解码,然后使用 Normalizer 来创建实体。像这样的东西:

$array= json_decode($json, true);
$valueToDenormalize = $array['value'];

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

请注意,我还没有尝试过这个。我不知道规范化器是否会以这种方式工作,但我知道它用于在数组和 Symfony 的实体之间进行规范化和非规范化。

如需进一步调查,您可以查看 Serializer 文档:
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

关于json - 使用 JSMSerializerBundle 反序列化多维 JSON API 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27921447/

相关文章:

javascript - json 值的 jstree 给出了一些错误

mysql - 学说模式更新总是要求约束和索引

json - 如何获取Newtonsoft.Json反序列化值的未转义字符串值?

javascript - 根据数组值将数组项合并到新数组中

java - 转换为 JSON 字符串时扩展类中的数据丢失

json - 尝试迭代json数组的map时Golang接口(interface)转换错误

php - Symfony2 fos 在一个 View 中登录、注册和忘记密码

php - 在PHP中操作DOM

java - Gson反序列化返回一个包含null的Object

c# - 在 C# 中从 base64 反序列化对象