如何在准确保留结构的同时将 Python 字典转换为 XML 字符串并返回?

问题描述 投票:0回答:1

我需要将一些 json 转换为 xml,然后back 转换为 json,最好保留结构。我已经非常接近了,但我找不到一种使用 dicttoxml/xmltodict 的方法,以免每个字典列表都是带有键“item”的字典,而原始字典则为它的值。

例如

{'mydicts': [{'id': 1, 'name': 'alice'}]}

变成:

<?xml version="1.0" encoding="UTF-8" ?><root><mydicts><item><id>1</id><name>alice</name></item></mydicts></root>

最终为:

{'mydicts': [{'item': {'id': '1', 'name': 'alice'}}]}

我最初也必须使用force_list。我的最后手段是使用一些后处理代码来进行此更改,但我宁愿避免这种情况。这是我现在拥有的一些示例代码:

import xmltodict
import dicttoxml

original_json = {
    "mydicts": [
        {
            "id": 1,
            "name": "alice"
        }
    ]
}


xml_string = dicttoxml.dicttoxml(original_json, attr_type=False).decode()

new_json = xmltodict.parse(xml_string, xml_attribs=False, force_list={'mydicts'})['root']

print(new_json)

其他解决方案也完全没问题。

python json xml xmltodict dicttoxml
1个回答
0
投票

它可以直接使用

xmltodict.unparse()
通过用根对象包围原始字典

import xmltodict

original_json = {
    "mydicts": [
        {
            "id": 1,
            "name": "alice"
        },
        {
            "id": 2,
            "name": "bob"
        }
    ]
}

tmp_json = {}
tmp_json['root'] = original_json

xml_string = xmltodict.unparse(tmp_json)

print(xml_string)

new_json = xmltodict.parse(xml_string, xml_attribs=False)['root']

print(new_json)

结果

<?xml version="1.0" encoding="utf-8"?>
<root><mydicts><id>1</id><name>alice</name></mydicts><mydicts><id>2</id><name>bob</name></mydicts></root>
{'mydicts': [{'id': '1', 'name': 'alice'}, {'id': '2', 'name': 'bob'}]}
© www.soinside.com 2019 - 2024. All rights reserved.