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