PHP Преобразование XML в Json с некоторыми (дублирующимися) элементами в массив Json - PullRequest
0 голосов
/ 17 декабря 2018

My Api (laravel) использует код Json.Теперь я также хочу поддерживать XML.Сообщение XML должно быть преобразовано в Json, чтобы оно вписывалось в существующую структуру.Но я не могу сопоставить XML с желаемым форматом Json.

Пример XML и преобразования в Json:

        $xml = "<?xml version='1.0'?>
    <catalog>
       <book>
            <author>Jan</author>
            <title>Xml to Json Array</title>
            <pages>
                <page>
                    <nr>1</nr>
                    <title>Welcome to my book</title>
                    <pagereviews>
                        <pagereview>
                            <name>maikel</name>
                            <comment>very good</comment>
                        </pagereview>
                        <pagereview>
                            <name>John</name>
                            <comment>i like this page</comment>
                        </pagereview>                            
                    </pagereviews>
                </page>
                <page>
                    <nr>2</nr>
                    <title>more info</title>
                </page>  
                <page>
                    <nr>3</nr>
                    <title>lots of fun</title>
                </page>                              
            </pages>
       </book>
    </catalog>";

    $xmlObject = simplexml_load_string($xml);

    $jsonString = json_encode($xmlObject);

    return $jsonString;

В Json это приводит к:

{
"book": {
    "author": "Jan",
    "title": "Xml to Json Array",
    "pages": {
        "page": [
            {
                "nr": "1",
                "title": "Welcome to my book",
                "pagereviews": {
                    "pagereview": [
                        {
                            "name": "maikel",
                            "comment": "very good"
                        },
                        {
                            "name": "John",
                            "comment": "i like this page"
                        }
                    ]
                }
            },
            {
                "nr": "2",
                "title": "more info"
            },
            {
                "nr": "3",
                "title": "lots of fun"
            }
        ]
    }
}

}

Мне нужно без тегов Страницаи Pagereview.Вот так.

{
   "book": {
      "author": "Jan",
      "title": "Xml to Json Array",
      "pages": [
         {
            "nr": "1",
            "title": "Welcome to my book",
            "pagereviews": [
               {
                  "name": "maikel",
                  "comment": "very good"
               },
               {
                  "name": "John",
                  "comment": "i like this page"
               }
            ]
         },
         {
            "nr": "2",
            "title": "more info"
         },
         {
            "nr": "3",
            "title": "lots of fun"
         }
      ]
   }
}

1 Ответ

0 голосов
/ 17 декабря 2018

Я сделал несколько пакетов, которые интегрируются с Laravel для упрощения XML.Вы можете проверить их здесь:

Если ваш xml должен отличаться по структуре от json, я бы порекомендовал вам посмотреть на пакет Spatie's Fractal .Он представит трансформаторы для ваших данных.Затем вы можете условно установить преобразователи, прежде чем использовать мои пакеты, чтобы данные выводились именно так, как вы хотите.

...