Python實(shí)現(xiàn)將Json轉(zhuǎn)換為Xml與Markdown
Python Json轉(zhuǎn)Xml
前景提要
17:55,你正準(zhǔn)備關(guān)機(jī),老板在群里@你:“把客戶給的 test-input.json 轉(zhuǎn)成 XML,今晚接口聯(lián)調(diào)要用。”
你打開文件,瞬間頭大:嵌套的對(duì)象、數(shù)組、布爾值混成一鍋粥。手敲 <tag>?估計(jì)得加班到凌晨。
你把同事剛發(fā)你的 json_to_xml.py 往命令行一扔——
python json_to_xml.py
3 秒后,test-output.xml 靜靜躺在桌面,標(biāo)簽層級(jí)分明,連 <?xml version="1.0"?> 都寫好了。
這把“瑞士軍刀”從此常駐你的 U 盤。
代碼解析 1
通俗解釋
就像把一封英文信先翻譯成中文再讀,這一步讓 Python 能把 JSON 內(nèi)容當(dāng)積木玩。
關(guān)鍵代碼
with open("test-input.json", "r") as json_file:
json_data = json.load(json_file) # 把 JSON 字符串變成 Python 字典或列表
代碼解析 2
通俗解釋
JSON 像俄羅斯套娃,大盒子里還有小盒子。腳本一層層拆開:遇到盒子(對(duì)象/數(shù)組)就繼續(xù)拆,遇到糖果(字符串/數(shù)字)就貼標(biāo)簽。
關(guān)鍵代碼
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
通俗解釋
拆到最底層時(shí),腳本自動(dòng)把鍵名變成標(biāo)簽名,把值放進(jìn)標(biāo)簽中間,同時(shí)用兩個(gè)空格縮進(jìn),讓 XML 像樓梯一樣好看。
關(guān)鍵代碼
# 示例輸出片段 """ <person> <name>Alice</name> <age>30</age> </person> """
代碼解析 4
通俗解釋
就像把整理好的筆記放進(jìn)文件夾,這一步把字符串一次性寫進(jìn)文件,順手加上 XML 文件頭。
關(guān)鍵代碼
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)
擴(kuò)展點(diǎn)子
1. 批量處理整個(gè)文件夾
給腳本加一個(gè)循環(huán),讓它一次吃下一整碗 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 秒套個(gè)圖形界面
用 tkinter 做一個(gè)小窗口,拖文件就能轉(zhuǎn)。
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"))
總結(jié)
你剛體驗(yàn)了一把“零門檻”自動(dòng)化:把任何 JSON 文件扔給腳本,3 秒就能收獲排版漂亮的 XML。它不需要安裝額外庫,只用系統(tǒng)自帶 Python;加上兩條簡(jiǎn)單擴(kuò)展,還能批量、還能點(diǎn)點(diǎn)鼠標(biāo)。下次再有人甩來配置,你就笑瞇瞇地雙擊腳本——下班前就能回家追劇。
Python Json轉(zhuǎn)Markdown
周五 18:00,你正準(zhǔn)備關(guān)機(jī),老板甩來一個(gè) 200 行的 config.json:“下班前把這份配置整理成文檔發(fā)我。”
你打開文件,瞬間眼花:嵌套的對(duì)象、數(shù)組、布爾值混成一團(tuán)。手敲 Markdown?估計(jì)得加班到半夜。
這時(shí),你把今天剛拿到的小腳本 script.py 往命令行一扔——
python script.py -i config.json -o config.md
3 秒后,config.md 靜靜躺在桌面:標(biāo)題、縮進(jìn)、代碼塊全排好,老板直夸“專業(yè)”。
這把“瑞士軍刀”從此常駐你的工具箱。
代碼解析 1
通俗解釋
就像把一封英文信先翻譯成中文再讀,這一步讓 Python 能“聽懂” JSON 的內(nèi)容。
關(guān)鍵代碼
def load_json(file):
try:
with open(file, 'r') as f:
data = f.read()
return json.loads(data) # 把 JSON 字符串變成 Python 字典或列表
except:
print("[ERROR] 文件必須是合法的 json")
代碼解析 2
通俗解釋
JSON 像俄羅斯套娃,大盒子里還有小盒子。腳本一層層拆開,遇到盒子(對(duì)象/數(shù)組)就繼續(xù)拆,遇到糖果(字符串/數(shù)字)就貼標(biāo)簽。
關(guān)鍵代碼
def parse_json(json_block, depth, options):
if isinstance(json_block, dict):
parse_dict(json_block, depth, options)
if isinstance(json_block, list):
parse_list(json_block, depth, options)
代碼解析 3
通俗解釋
拆到最后,給每個(gè)“糖果”寫上名字和味道:age: 18。腳本自動(dòng)在前面加 - 和反引號(hào),讓 Markdown 格式一步到位。
關(guān)鍵代碼
def add_value(key, value, depth):
chain = tab * (bool(depth - 1)) + list_tag + \
str(key) + ": " + inline_code + str(value) + inline_code + "\n"
global markdown
markdown += chain
代碼解析 4
通俗解釋
就像把整理好的筆記放進(jìn)文件夾,這一步把生成的 Markdown 字符串一次性寫進(jìn)指定文件,完事收工。
關(guān)鍵代碼
def write_out(markdown, output_file):
with open(output_file, 'w+') as f:
f.write(markdown)
擴(kuò)展點(diǎn)子
1. 批量處理整個(gè)文件夾
給腳本加一個(gè) -b 參數(shù),讓它一次吃下一整碗 JSON。
# 在 main() 里加幾行
import glob
if args.batch:
for json_path in glob.glob('*.json'):
convert(json_path, json_path[:-4] + 'md', options)
2. 30 秒套個(gè)圖形界面
用 tkinter 做一個(gè)小窗口,拖文件就能轉(zhuǎn)。
import tkinter as tk
from tkinter import filedialog
???????root = tk.Tk()
root.withdraw() # 只彈出文件選擇框
input_path = filedialog.askopenfilename(title="選 JSON")
convert(input_path, input_path[:-4] + 'md', {'ignore': '', 'keep': ''})
總結(jié)
你剛體驗(yàn)了一把“零門檻”自動(dòng)化:把任何 JSON 文件扔給腳本,3 秒就能收獲排版漂亮的 Markdown。它不需要安裝額外庫,只用系統(tǒng)自帶 Python;加上兩條簡(jiǎn)單擴(kuò)展,還能批量、還能點(diǎn)點(diǎn)鼠標(biāo)。下次再有人甩來配置,你就笑瞇瞇地雙擊腳本——下班前就能回家追番。
到此這篇關(guān)于Python實(shí)現(xiàn)將Json轉(zhuǎn)換為Xml與Markdown的文章就介紹到這了,更多相關(guān)Python Json格式轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)戰(zhàn)小游戲飛機(jī)大戰(zhàn)詳解
飛機(jī)大戰(zhàn)想必是很多人童年時(shí)期的經(jīng)典游戲,我們依舊能記得抱個(gè)老人機(jī)娛樂的場(chǎng)景,下面這篇文章主要給大家介紹了關(guān)于如何利用python寫一個(gè)簡(jiǎn)單的飛機(jī)大戰(zhàn)小游戲的相關(guān)資料,需要的朋友可以參考下2021-11-11
使用Scrapy爬取動(dòng)態(tài)數(shù)據(jù)
今天小編就為大家分享一篇關(guān)于使用Scrapy爬取動(dòng)態(tài)數(shù)據(jù)的文章,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-10-10
基于Python實(shí)現(xiàn)微信自動(dòng)回復(fù)功能
這篇文章主要為大家詳細(xì)介紹了Python如何通過WechatPCAPI來實(shí)現(xiàn)微信自動(dòng)回復(fù)的功能,文中的示例代碼講解詳細(xì),快跟隨小編一起動(dòng)手嘗試一下2022-06-06
Python自動(dòng)化操作Excel生成專業(yè)數(shù)據(jù)透視表的實(shí)戰(zhàn)指南
在數(shù)據(jù)分析的廣闊領(lǐng)域中,數(shù)據(jù)透視表無疑是處理和理解海量數(shù)據(jù)的強(qiáng)大工具,本文將深入探討如何利用Python庫,實(shí)現(xiàn)Excel數(shù)據(jù)透視表的自動(dòng)化生成、配置與格式化,感興趣的可以了解下2025-12-12
python+opencv實(shí)現(xiàn)動(dòng)態(tài)物體追蹤
這篇文章主要為大家詳細(xì)介紹了python+opencv實(shí)現(xiàn)動(dòng)態(tài)物體的追蹤,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
Python GUI編程學(xué)習(xí)筆記之tkinter控件的介紹及基本使用方法詳解
這篇文章主要介紹了Python GUI編程學(xué)習(xí)筆記之tkinter控件的介紹及基本使用方法,結(jié)合實(shí)例形式詳細(xì)分析了Python GUI編程中tkinter控件的原理、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2020-03-03

