JSON转XML需按规则映射:对象→元素,字符串/数字→文本,数组→多个同名子元素或带索引容器;推荐用xml.etree.ElementTree手动构建以精准控制命名、空值、编码与缩进。

理解JSON转XML的核心逻辑
JSON和XML是两种不同结构的数据格式:JSON以键值对和嵌套对象/数组为主,XML依赖标签层级和属性。直接“转换”不是简单替换,而是按规则映射——比如JSON对象转为XML元素,字符串值转为文本内容,数组可能转为多个同名子元素或带索引属性的容器。
用xml.etree.ElementTree手动构建(推荐,可控性强)
Python标准库xml.etree.ElementTree足够轻量且无需安装第三方包。适合批量处理时统一控制命名、空值处理、编码和缩进。
- 遍历指定目录下所有
.json文件,用json.load()读取内容 -
递归函数将字典/列表转为Element对象:字典→带子元素的节点,列表→多个同名节点(如
),字符串/数字→节点文本- …
- 用ET.indent()(Python 3.9+)美化输出,或用minidom.toprettyxml()兼容旧版本
- 保存为
.xml文件,注意设置encoding='utf-8'并写入BOM(如需Windows兼容)
用dicttoxml简化基础场景(适合快速原型)
第三方库dicttoxml可一行把Python字典转XML字符串,省去手写递归逻辑。但要注意:
- 安装:
pip install dicttoxml - 默认会添加
外层标签,可用custom_root='data'修改 - 数组默认生成
子节点,可用attr_type=False禁用类型属性(避免type="str"等冗余) - 不自动处理特殊字符(如
&、),需提前用html.escape()转义字符串值
批量处理的关键细节
真正“批量”不只是循环文件,还要考虑实际工程需求:
立即学习“Python免费学习笔记(深入)”;
- 文件匹配:用pathlib.Path('input_dir').glob('*.json')比os.listdir()更安全清晰
- 错误隔离:单个JSON解析失败不应中断整个批次,用try/except捕获json.JSONDecodeError并记录日志
-
命名一致性:输出XML文件名建议保留原名,如
user.json → user.xml,避免硬编码后缀替换 -
编码与声明:XML文件首行应为
,用ET.tostring(root, encoding='unicode', method='xml')配合手动拼接










