【python实用小脚本-161】Python Json转Xml:告别手敲标签——一行命令把配置秒变可导入的XML

发布于:2025-07-30 ⋅ 阅读:(23) ⋅ 点赞:(0)

Python Json转Xml:告别手敲标签——一行命令把配置秒变可导入的XML

关键词:json转xml零依赖脚本自动生成标签小白友好跨平台


故事开场:周五下午,老板又甩来“配置翻译”任务

17:55,你正准备关机,老板在群里@你:“把客户给的 test-input.json 转成 XML,今晚接口联调要用。”
你打开文件,瞬间头大:嵌套的对象、数组、布尔值混成一锅粥。手敲 <tag>?估计得加班到凌晨。

你把同事刚发你的 json_to_xml.py 往命令行一扔——

python json_to_xml.py

3 秒后,test-output.xml 静静躺在桌面,标签层级分明,连 <?xml version="1.0"?> 都写好了。
这把“瑞士军刀”从此常驻你的 U 盘。


代码解析 1:读文件——先把 JSON 变成 Python 能“嚼”的东西

通俗解释
就像把一封英文信先翻译成中文再读,这一步让 Python 能把 JSON 内容当积木玩。

关键代码

with open("test-input.json", "r") as json_file:
    json_data = json.load(json_file)  # 把 JSON 字符串变成 Python 字典或列表

代码解析 2:拆积木——递归拆解每一层

通俗解释
JSON 像俄罗斯套娃,大盒子里还有小盒子。脚本一层层拆开:遇到盒子(对象/数组)就继续拆,遇到糖果(字符串/数字)就贴标签。

关键代码

def json_to_xml(json_obj, line_padding=""):
    result_list = []
    if isinstance(json_obj, dict):
        for key, value in json_obj.items():
            result_list.append(f"{line_padding}<{key}>")
            result_list.append(json_to_xml(value, line_padding + "  "))
            result_list.append(f"{line_padding}</{key}>")
    elif isinstance(json_obj, list):
        for element in json_obj:
            result_list.append(json_to_xml(element, line_padding))
    else:
        result_list.append(f"{line_padding}{json_obj}")
    return "\n".join(result_list)

代码解析 3:贴标签——给每一层自动加 <tag> 和缩进

通俗解释
拆到最底层时,脚本自动把键名变成标签名,把值放进标签中间,同时用两个空格缩进,让 XML 像楼梯一样好看。

关键代码

# 示例输出片段
"""
<person>
  <name>Alice</name>
  <age>30</age>
</person>
"""

代码解析 4:写文件——把结果存成 .xml

通俗解释
就像把整理好的笔记放进文件夹,这一步把字符串一次性写进文件,顺手加上 XML 文件头。

关键代码

xml_data_with_header = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml_data
with open("test-output.xml", "w") as file:
    file.write(xml_data_with_header)

如果还想更厉害:两个 5 分钟扩展点子

1. 批量处理整个文件夹

给脚本加一个循环,让它一次吃下一整碗 JSON。

import glob
for json_path in glob.glob("*.json"):
    with open(json_path, "r") as f:
        data = json.load(f)
    xml_str = json_to_xml(data)
    save_xml_file(xml_str, json_path.replace(".json", ".xml"))

2. 30 秒套个图形界面

tkinter 做一个小窗口,拖文件就能转。

import tkinter as tk
from tkinter import filedialog

root = tk.Tk()
root.withdraw()  # 只弹出文件选择框
input_path = filedialog.askopenfilename(title="选 JSON")
with open(input_path, "r") as f:
    xml = json_to_xml(json.load(f))
save_xml_file(xml, input_path.replace(".json", ".xml"))

总结

你刚体验了一把“零门槛”自动化:把任何 JSON 文件扔给脚本,3 秒就能收获排版漂亮的 XML。它不需要安装额外库,只用系统自带 Python;加上两条简单扩展,还能批量、还能点点鼠标。下次再有人甩来配置,你就笑眯眯地双击脚本——下班前就能回家追剧。

源码获取

完整代码已开源,包含详细的注释文档:
🔗 [GitCode仓库] https://gitcode.com/laonong-1024/python-automation-scripts
📥 [备用下载] https://pan.quark.cn/s/654cf649e5a6 提取码:f5VG


网站公告

今日签到

点亮在社区的每一天
去签到