我需要将一些 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)
其他解决方案也完全没问题。
它可以直接使用
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'}]}