【python實用小腳本-161】Python Json轉Xml:告別手敲標簽——一行命令把配置秒變可導入的XML

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 filedialogroot = 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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/91002.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/91002.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/91002.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WisFile(文件整理工具) v1.2.19 免費版

下載&#xff1a;https://pan.quark.cn/s/db99b679229fWisFile是一款免費AI文件管理工具&#xff0c;可以在電腦本地運行。它專注于解決文件命名混亂、歸類無序和手動整理耗時的問題。通過AI技術智能識別文件內容&#xff0c;支持批量重命名和智能分類歸檔功能&#xff0c;可自…

簡歷美容院:如何把“打雜經歷“包裝成“核心項目“?

簡歷美容院&#xff1a;如何把"打雜經歷"包裝成"核心項目"&#xff1f; 大家好&#xff0c;我是程序員小白條&#xff0c;今天來研究下簡歷包裝的事&#xff0c;小白可以按我的包裝流程走&#xff0c;可以分步驟進行包裝&#xff0c;具體怎么進行可以看正文…

零基礎-動手學深度學習-7.7 稠密連接網絡(DenseNet)

ResNet極大地改變了如何參數化深層網絡中函數的觀點。 稠密連接網絡&#xff08;DenseNet&#xff09;在某種程度上是ResNet的邏輯擴展。讓我們先從數學上了解一下。 7.7.1. 從ResNet到DenseNet 7.7.2. 稠密塊體 DenseNet使用了ResNet改良版的“批量規范化、激活和卷積”架構…

Marin說PCB之POC電路layout設計仿真案例---09

好消息&#xff0c;好消息&#xff0c;小編最愛的國漫凡人修仙傳電視劇版本的終于可以看了&#xff0c;小編我推薦一波啊&#xff0c;感興趣的道友們可以去某酷視頻去追劇啊。 好了&#xff0c;咱們言歸正傳啊。本期的案例是這個月中旬我們組的測試大哥阿永去某田實驗室去測試我…

論文閱讀--射頻電源在半導體領域的應用

《射頻電源在半導體領域的應用》 論文信息&#xff1a;左政,馮國楠,李建慧,等.射頻電源在半導體領域的應用[J].軟件和集成電路,2025,(04):38-43.DOI:10.19609/j.cnki.cn10-1339/tn.2025.04.007. 一、射頻電源的定義與分類 1.1 定義射頻電源&#xff08;RF Power Supply&#xf…

綠算技術攜手昇騰發布高性能全閃硬盤緩存設備,推動AI大模型降本增效

在數字化浪潮席卷全球的今天&#xff0c;人工智能已經成為推動企業創新與發展的重要力量。廣東省綠算技術有限公司&#xff08;簡稱“綠算技術”&#xff09;緊跟時代步伐&#xff0c;基于華為昇騰AI大模型&#xff0c;推出了高性能全閃硬盤緩存設備&#xff0c;致力于為人工智…

HoloLens2系列講解 - 06 基本操作

一、導入MRTK插件 1. 首先要新建一個項目,打開unity,新建一個project。 2. 導入MRTK包。 3. 點擊 Mixed Reality Toolkit > Add to scene and Configure 添加MR場景配置文件。

Linux Vim 編輯器使用指南

Linux Vim 編輯器使用指南一、Vim 簡介 Vim&#xff08;Vi IMproved&#xff09;是 Linux/Unix 系統中最流行的文本編輯器之一&#xff0c;它是 Vi 的增強版&#xff0c;支持多模式操作、語法高亮、插件擴展等特性&#xff0c;無需鼠標即可高效編輯文本。 二、核心工作模式 Vim…

運維筆記:破解 VMware 遷移難題

一、VMware 遷移前的準備與評估1.1 遷移場景與目標分析VMware 遷移常見場景包括&#xff1a;同平臺升級&#xff1a;從 vSphere 6.7 遷移到 7.0/8.0&#xff08;硬件兼容、功能迭代&#xff09;跨平臺遷移&#xff1a;VMware→KVM/Xen&#xff08;降低 licensing 成本&#xff…

cartographer 點云數據的預處理

目錄 傳感器數據的走向 體素濾波與之后的處理 3D情況下的激光雷達數據的預處理 初始位姿估計 位姿推測器的優缺點分析與總結 可能有問題的點 可能的改進建議 傳感器數據的走向 傳感器數據從CollatedTrajectoryBuilder類的HandleCollatedSensorData函數 傳遞GlobalTrajec…

基于數據挖掘的短視頻點贊影響因素分析【LightGBM、XGBoost、隨機森林、smote】

文章目錄有需要本項目的代碼或文檔以及全部資源&#xff0c;或者部署調試可以私信博主項目介紹總結每文一語有需要本項目的代碼或文檔以及全部資源&#xff0c;或者部署調試可以私信博主 項目介紹 隨著短視頻行業的高速發展&#xff0c;尤其是以抖音為代表的平臺不斷壯大&…

Git 從入門到精通

Git 從入門到精通 涵蓋了核心概念、常用命令、協作流程和高級技巧&#xff1a; 核心理念&#xff1a; 版本控制&#xff1a; 記錄文件變化歷史&#xff0c;可回溯到任意版本。分布式&#xff1a; 每個開發者擁有完整的倉庫副本&#xff08;包括完整歷史&#xff09;&#xf…

UE5多人MOBA+GAS 30、技能升級機制

文章目錄前言技能的升級修改一下按鍵的輸入判斷是否滿級在ASC中升級技能由角色的輸入調用ASC的升級功能技能圖標的優化技能升級材質&#xff0c;可升級技能圖標的閃爍刷新技能升級后的藍耗和CD&#xff0c;以及藍不夠時技能進入灰色狀態修復傷害數字特效只顯示3位數的問題前言 …

筆試——Day22

文章目錄第一題題目思路代碼第二題題目&#xff1a;思路代碼第三題題目&#xff1a;思路代碼第一題 題目 添加字符 思路 枚舉所有字符串a與字符串b相對應的位置 代碼 第二題 題目&#xff1a; 數組變換 思路 貪心 以最大值為基準元素&#xff0c;判斷其他元素能否變為最…

__getattr__和 __getattribute__ 的用法

1、__getattr__ 的用法當實例對象訪問一個不存在的屬性時&#xff0c;會執行 __getattr__ 方法&#xff0c;如果屬性存在的話&#xff0c;就不會執行案例 class Person:def __init__(self, name, age):self.name nameself.age agedef get_info(self):return f"name: {se…

信息化項目驗收測試實戰指南

在當今數字化轉型的大背景下&#xff0c;信息化項目驗收建設已成為企業提升運營效率、優化管理流程的重要手段。然而&#xff0c;很多企業在投入大量資金建設信息系統后&#xff0c;卻常常面臨系統上線后無法滿足實際業務需求的困境。究其原因&#xff0c;往往是由于忽視了信息…

牛頓拉夫遜法PQ分解法計算潮流MATLAB程序計算模型。

牛頓拉夫遜法&PQ分解法計算潮流MATLAB程序計算模型。本程序模型基于MATLAB進行潮流計算&#xff0c;建議先安裝matpower插件&#xff08;MATLAB中非常重要的潮流計算的插件&#xff09;。本程序可進行牛拉法和PQ分解法潮流計算的切換&#xff0c;對比潮流計算的結果。很適合…

Go語言實戰案例-計算字符串編輯距離

在自然語言處理、拼寫糾錯、模糊搜索等場景中,我們經常需要衡量兩個字符串之間的相似度。編輯距離(Edit Distance) 就是一個經典的衡量方式,它描述了將一個字符串轉換為另一個字符串所需的最少操作次數。 一、問題定義:什么是編輯距離? 編輯距離,也稱為 Levenshtein Di…

Java時間與日期常用方法

DateDate date new Date(); //獲取當前時間 System.out.println(date.getYear() 1900); // 必須加上1900 System.out.println(date.getMonth() 1); // 0~11&#xff0c;必須加上1 System.out.println(date.getDate()); // 1~31&#xff0c;不能加1Ca…

【MySQL】從連接數據庫開始:JDBC 編程入門指南

個人主頁&#xff1a;?喜歡做夢 歡迎 &#x1f44d;點贊 ?關注 ??收藏 &#x1f4ac;評論 目錄 &#x1f31f;一、什么是JDBC&#xff1f; &#x1f31f;二、JDBC編程的步驟 ?使用步驟 ?DriverManger &#x1f4ab;定義 &#x1f4ab;DriverManger的主要功能 …