Мой 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"}
]
}
}
}
Мне это нужно без тегов Page и 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"}
]
}
}
Я сделал несколько пакетов, которые интегрируются с Laravel для упрощения XML. Вы можете проверить их здесь:
Если ваш XML должен отличаться по структуре от JSON, я бы порекомендовал вам изучить Пространственный Фрактальный пакет. Он представит трансформаторы для ваших данных. Затем вы можете условно установить преобразователи, прежде чем использовать мои пакеты, чтобы данные выходили именно так, как вы хотите.
Других решений пока нет …