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
      )
    )

)

これを行う方法のヒントは誰にありますか?

ありがとう!

4

1 に答える 1

1

おそらく、最初にデコードしてから、ノーマライザーを使用してエンティティを作成できます。このようなもの:

$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

于 2015-04-24T09:55:44.263 に答える