Python實現(xiàn)將Json轉(zhuǎn)換為Xml與Markdown
Python Json轉(zhuǎn)Xml
前景提要
17:55,你正準備關(guān)機,老板在群里@你:“把客戶給的 test-input.json 轉(zhuǎn)成 XML,今晚接口聯(lián)調(diào)要用。”
你打開文件,瞬間頭大:嵌套的對象、數(shù)組、布爾值混成一鍋粥。手敲 <tag>?估計得加班到凌晨。
你把同事剛發(fā)你的 json_to_xml.py 往命令行一扔——
python json_to_xml.py
3 秒后,test-output.xml 靜靜躺在桌面,標簽層級分明,連 <?xml version="1.0"?> 都寫好了。
這把“瑞士軍刀”從此常駐你的 U 盤。
代碼解析 1
通俗解釋
就像把一封英文信先翻譯成中文再讀,這一步讓 Python 能把 JSON 內(nèi)容當積木玩。
關(guān)鍵代碼
with open("test-input.json", "r") as json_file:
json_data = json.load(json_file) # 把 JSON 字符串變成 Python 字典或列表
代碼解析 2
通俗解釋
JSON 像俄羅斯套娃,大盒子里還有小盒子。腳本一層層拆開:遇到盒子(對象/數(shù)組)就繼續(xù)拆,遇到糖果(字符串/數(shù)字)就貼標簽。
關(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
通俗解釋
拆到最底層時,腳本自動把鍵名變成標簽名,把值放進標簽中間,同時用兩個空格縮進,讓 XML 像樓梯一樣好看。
關(guān)鍵代碼
# 示例輸出片段 """ <person> <name>Alice</name> <age>30</age> </person> """
代碼解析 4
通俗解釋
就像把整理好的筆記放進文件夾,這一步把字符串一次性寫進文件,順手加上 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)
擴展點子
1. 批量處理整個文件夾
給腳本加一個循環(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 秒套個圖形界面
用 tkinter 做一個小窗口,拖文件就能轉(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é)
你剛體驗了一把“零門檻”自動化:把任何 JSON 文件扔給腳本,3 秒就能收獲排版漂亮的 XML。它不需要安裝額外庫,只用系統(tǒng)自帶 Python;加上兩條簡單擴展,還能批量、還能點點鼠標。下次再有人甩來配置,你就笑瞇瞇地雙擊腳本——下班前就能回家追劇。
Python Json轉(zhuǎn)Markdown
周五 18:00,你正準備關(guān)機,老板甩來一個 200 行的 config.json:“下班前把這份配置整理成文檔發(fā)我。”
你打開文件,瞬間眼花:嵌套的對象、數(shù)組、布爾值混成一團。手敲 Markdown?估計得加班到半夜。
這時,你把今天剛拿到的小腳本 script.py 往命令行一扔——
python script.py -i config.json -o config.md
3 秒后,config.md 靜靜躺在桌面:標題、縮進、代碼塊全排好,老板直夸“專業(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 像俄羅斯套娃,大盒子里還有小盒子。腳本一層層拆開,遇到盒子(對象/數(shù)組)就繼續(xù)拆,遇到糖果(字符串/數(shù)字)就貼標簽。
關(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
通俗解釋
拆到最后,給每個“糖果”寫上名字和味道:age: 18。腳本自動在前面加 - 和反引號,讓 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
通俗解釋
就像把整理好的筆記放進文件夾,這一步把生成的 Markdown 字符串一次性寫進指定文件,完事收工。
關(guān)鍵代碼
def write_out(markdown, output_file):
with open(output_file, 'w+') as f:
f.write(markdown)
擴展點子
1. 批量處理整個文件夾
給腳本加一個 -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 秒套個圖形界面
用 tkinter 做一個小窗口,拖文件就能轉(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é)
你剛體驗了一把“零門檻”自動化:把任何 JSON 文件扔給腳本,3 秒就能收獲排版漂亮的 Markdown。它不需要安裝額外庫,只用系統(tǒng)自帶 Python;加上兩條簡單擴展,還能批量、還能點點鼠標。下次再有人甩來配置,你就笑瞇瞇地雙擊腳本——下班前就能回家追番。
到此這篇關(guān)于Python實現(xiàn)將Json轉(zhuǎn)換為Xml與Markdown的文章就介紹到這了,更多相關(guān)Python Json格式轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python修改linux中文件(文件夾)的權(quán)限屬性操作
這篇文章主要介紹了python修改linux中文件(文件夾)的權(quán)限屬性操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
Python PIL庫讀取設(shè)置圖像的像素內(nèi)容方法示例
這篇文章主要為大家介紹了使用Python PIL庫Image模塊中的getpixel和putpixel方法讀取設(shè)置圖像的像素內(nèi)容實例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01

