XML和JSON是两种常见的数据交换格式,XML通过标签嵌套来组织数据,结构严谨但冗余度高,JSON采用键值对的形式,更简洁易解析。在实际开发中,经常需要将XML数据转换为JSON格式方便后续处理。

手动转换XML为JSON的基本规则
手动转换适用于结构简单的XML数据,核心是将XML的标签对应为JSON的键,标签内容对应为JSON的值,嵌套标签对应为嵌套对象。需要注意属性、文本内容、重复标签的处理逻辑。
转换规则说明
- XML的标签名作为JSON的键,标签内的文本内容作为对应的值
- 标签的属性可以单独作为一个对象放在对应键的
_attributes属性下 - 如果同一层级存在多个同名标签,转换为JSON数组
- 标签下同时存在文本和其他子标签时,文本内容放在
_text键下
转换示例
假设有如下XML数据:
<user id="1001">
<name>张三</name>
<age>25</age>
<hobbies>
<hobby>篮球</hobby>
<hobby>阅读</hobby>
</hobbies>
</user>按照上述规则转换后的JSON结果为:
{
"user": {
"_attributes": {
"id": "1001"
},
"name": "张三",
"age": "25",
"hobbies": {
"hobby": ["篮球", "阅读"]
}
}
}使用Python自动转换XML为JSON
对于结构复杂或者数据量大的XML,手动转换效率低下,可通过Python的第三方库快速实现转换。常用的库有xmltodict,它可以将XML直接转换为有序字典,再序列化为JSON。
环境准备
首先安装xmltodict和json库,json是Python标准库无需额外安装:
pip install xmltodict
转换代码实现
以下是完整的转换代码示例:
import xmltodict
import json
# 待转换的XML字符串
xml_data = """<user id="1001">
<name>张三</name>
<age>25</age>
<hobbies>
<hobby>篮球</hobby>
<hobby>阅读</hobby>
</hobbies>
</user>"""
def xml_to_json(xml_str):
# 将XML转换为有序字典
xml_dict = xmltodict.parse(xml_str)
# 将字典转换为JSON字符串,设置缩进为4方便阅读
json_str = json.dumps(xml_dict, indent=4, ensure_ascii=False)
return json_str
if __name__ == "__main__":
result = xml_to_json(xml_data)
print(result)运行上述代码后,输出的JSON结果与手动转换的结果一致。xmltodict.parse方法会自动处理同名标签、属性等场景,无需开发者手动编写规则。
转换过程中的注意事项
- XML中的
<、>、&等特殊字符需要先进行转义,否则解析会报错 - 如果XML中包含命名空间,
xmltodict会在键名中保留命名空间前缀,需要根据实际需求处理 - 转换后的JSON值默认都是字符串类型,如果需要数值、布尔等类型,需要额外做类型转换
- 对于超大XML文件,不建议一次性读取到内存,可结合
xml.sax流式解析后逐步转换,避免内存溢出