Как правильно конвертировать XML в JSON на python с учетом массивов?

Всем привет! Есть потребность конвертировать XML в JSON на python. Та реализация что есть не подходит, т.к. добавляет ненужный тэг. Есть XML вида:

<base>
    <test>test xml</test>
    <array>
        <element>
            <name>name1</name>
            <value>value1</value>
        </element>
        <element>
            <name>name2</name>
            <value>value2</value>
        </element>
        <element>
            <name>name3</name>
            <value>value3</value>
        </element>
    </array>
</base>

А так же есть простой код:

import json
import xmltodict

with open("D:/PST/Zenit/test cases/text.xml") as xml_file:
    data_dict = xmltodict.parse(xml_file.read())

    json_data = json.dumps(data_dict)
    with open("data.json", "w") as json_file:
        json_file.write(json_data)

При запуске кода получаю такой JSON:

{
    "base": {
        "test": "asdasd", 
        "array": {
            "element": [
                {
                    "name": "name1", 
                    "value": "value1"
                }, 
                {
                    "name": "name2", 
                    "value": "value2"
                }, 
                {
                    "name": "name3", 
                    "value": "value3"
                }
            ]
        }
    }
}

А по задаче требуется получить следующий JSON:

{
    "base": {
        "test": "asdasd", 
        "array": [
            {
                "name": "name1", 
                "value": "value1"
            }, 
            {
                "name": "name2", 
                "value": "value2"
            }, 
            {
                "name": "name3", 
                "value": "value3"
            }
        ]
    }
}

То есть требуется получить JSON с преобразованными тэгами массива (element, item) Подскажите, есть ли решение какое?


Ответы (1 шт):

Автор решения: Sequent

Базовый вариант без проверок полей

import json
import xmltodict

with open("test.xml") as xml_file:
    data_dict = xmltodict.parse(xml_file.read())
    data_dict['base']['array'] = data_dict['base']['array']['element']
    json_data = json.dumps(data_dict)
    with open("test.json", "w") as json_file:
        json_file.write(json_data)

Результат:

{"base": {"test": "test xml", "array": [{"name": "name1", "value": "value1"}, {"name": "name2", "value": "value2"}, {"name": "name3", "value": "value3"}]}}
→ Ссылка