Python中XML轉(zhuǎn)JSON、XML轉(zhuǎn)字典代碼示例
前言
今天我們將學(xué)習(xí)如何在 Python 中將 XML 轉(zhuǎn)換為 JSON 和 XML 轉(zhuǎn)換為字典。我們可以使用 Python 的 xmltodict
模塊來(lái)讀取 XML 文件并將其轉(zhuǎn)換為字典或 JSON 數(shù)據(jù)。我們還可以在大型 XML 文件上進(jìn)行流式處理,并將其轉(zhuǎn)換為字典。在進(jìn)入編碼部分之前,讓我們首先了解為什么需要進(jìn)行 XML 轉(zhuǎn)換。
將 XML 轉(zhuǎn)換為字典/JSON
XML 文件已經(jīng)逐漸過(guò)時(shí),但在網(wǎng)絡(luò)上仍然有許多大型系統(tǒng)在使用這種格式。XML 比 JSON 更重,因此大多數(shù)開發(fā)人員更喜歡在其應(yīng)用程序中使用后者。當(dāng)應(yīng)用程序需要理解任何來(lái)源提供的 XML 時(shí),將其轉(zhuǎn)換為 JSON 可能是一項(xiàng)繁瑣的任務(wù)。Python 中的 xmltodict
模塊使這項(xiàng)任務(wù)變得非常簡(jiǎn)單和直觀。
開始使用 xmltodict
我們可以開始使用 xmltodict
模塊,但首先需要安裝它。我們將主要使用 pip 來(lái)進(jìn)行安裝。
安裝 xmltodict 模塊
以下是我們?nèi)绾问褂?Python 包索引(pip)安裝 xmltodict 模塊:
pip install xmltodict
由于 xmltodict
是一個(gè)非常輕量級(jí)的模塊,因此安裝速度會(huì)很快。這是此安裝的輸出:!python install xmltodict module 最好的一點(diǎn)是,該模塊不依賴于任何其他外部模塊,因此它是輕量級(jí)的,并且避免了任何版本沖突。僅供演示,在基于 Debian 的系統(tǒng)上,可以使用 apt
工具輕松安裝此模塊:
sudo apt install python-xmltodict
另一個(gè)優(yōu)點(diǎn)是該模塊有一個(gè)官方的 Debian 軟件包。
Python XML 轉(zhuǎn)換為 JSON
嘗試此模塊的最佳方法是執(zhí)行其最初設(shè)計(jì)的操作之一,即執(zhí)行 XML 到 JSON 的轉(zhuǎn)換。讓我們看一下如何完成此操作的代碼片段:
import xmltodict import pprint import json my_xml = """ <audience> <id what="attribute">123</id> <name>Shubham</name> </audience> """ pp = pprint.PrettyPrinter(indent=4) pp.pprint(json.dumps(xmltodict.parse(my_xml)))
讓我們看一下此程序的輸出:!python xml to json 在這里,我們只需使用 parse(...)
函數(shù)將 XML 數(shù)據(jù)轉(zhuǎn)換為 JSON,然后我們使用 json
模塊以更好的格式打印 JSON。
將 XML 文件轉(zhuǎn)換為 JSON
將 XML 數(shù)據(jù)直接放在代碼中既不總是可能的,也不現(xiàn)實(shí)。通常,我們將數(shù)據(jù)保存在數(shù)據(jù)庫(kù)或某些文件中。我們也可以直接選擇文件并將其轉(zhuǎn)換為 JSON。讓我們看一下如何使用 XML 文件執(zhí)行轉(zhuǎn)換的代碼片段:
import xmltodict import pprint import json with open('person.xml') as fd: doc = xmltodict.parse(fd.read()) pp = pprint.PrettyPrinter(indent=4) pp.pprint(json.dumps(doc))
讓我們看一下此程序的輸出:!python xml file to json 在這里,我們使用另一個(gè)模塊 pprint 以格式化的方式打印輸出。除此之外,使用 open(...)
函數(shù)非常直觀,我們使用它來(lái)獲取文件描述符,然后將文件解析為 JSON 對(duì)象。
Python XML 轉(zhuǎn)換為字典
正如模塊名稱本身所暗示的那樣,xmltodict 實(shí)際上將我們提供的 XML 數(shù)據(jù)轉(zhuǎn)換為一個(gè)簡(jiǎn)單的 Python 字典。因此,我們也可以簡(jiǎn)單地使用字典鍵訪問(wèn)數(shù)據(jù)。以下是一個(gè)示例程序:
import xmltodict import pprint import json my_xml = """ <audience> <id what="attribute">123</id> <name>Shubham</name> </audience> """ my_dict = xmltodict.parse(my_xml) print(my_dict['audience']['id']) print(my_dict['audience']['id']['@what'])
讓我們看一下此程序的輸出:!python xml to dict 因此,標(biāo)簽可以作為鍵使用,同時(shí)屬性鍵也可以使用 @
符號(hào)作為前綴。
支持 XML 中的命名空間
在 XML 數(shù)據(jù)中,通常有一組命名空間,用于定義 XML 文件提供的數(shù)據(jù)范圍。在轉(zhuǎn)換為 JSON 格式時(shí),有必要讓這些命名空間在 JSON 格式中保持不變。讓我們考慮這個(gè)示例 XML 文件:
<root xmlns="https://defaultns.com/" xmlns:a="https://a.com/"> <audience> <id what="attribute">123</id> <name>Shubham</name> </audience> </root>
以下是一個(gè)示例程序,演示了如何在 JSON 格式中包含 XML 命名空間:
import xmltodict import pprint import json with open('person.xml') as fd: doc = xmltodict.parse(fd.read(), process_namespaces=True) pp = pprint.PrettyPrinter(indent=4) pp.pprint(json.dumps(doc))
讓我們看一下此程序的輸出:!xml namespace to dict and json
JSON 轉(zhuǎn) XML 轉(zhuǎn)換
盡管將 XML 轉(zhuǎn)換為 JSON 是該模塊的主要目標(biāo),但 xmltodict 也支持執(zhí)行相反的操作,將 JSON 轉(zhuǎn)換為 XML 格式。我們將在程序中提供 JSON 數(shù)據(jù)。以下是一個(gè)示例程序:
import xmltodict student = { "data" : { "name" : "Shubham", "marks" : { "math" : 92, "english" : 99 }, "id" : "s387hs3" } } print(xmltodict.unparse(student, pretty=True))
讓我們看看這個(gè)程序的輸出:!python json to xml 請(qǐng)注意,為了使其正常工作,必須提供單個(gè) JSON 鍵。如果我們考慮修改我們的程序,使其在數(shù)據(jù)的第一級(jí)包含多個(gè) JSON 鍵,如下所示:
import xmltodict student = { "name" : "Shubham", "marks" : { "math" : 92, "english" : 99 }, "id" : "s387hs3" } print(xmltodict.unparse(student, pretty=True))
在這種情況下,我們?cè)诟?jí)別有三個(gè)鍵。如果我們嘗試對(duì)這種形式的 JSON 進(jìn)行解析,將會(huì)遇到以下錯(cuò)誤:!python json to xml unparse error。這是因?yàn)?xmltodict 需要使用第一個(gè)鍵構(gòu)造 XML,作為根 XML 標(biāo)簽。這意味著在數(shù)據(jù)的根級(jí)別只能有一個(gè) JSON 鍵。
結(jié)論
在本課程中,我們學(xué)習(xí)了一個(gè)出色的 Python 模塊,可用于解析和轉(zhuǎn)換 XML 為 JSON,反之亦然。我們還學(xué)習(xí)了如何使用 xmltodict 模塊將 XML 轉(zhuǎn)換為字典。
需要注意的點(diǎn)
1.讀取xml文件的時(shí)候,如果里面包含中文,要指定編碼格式
with open(‘input1.xml', encoding=“UTF-8”) as xml_file
2.將字典類型轉(zhuǎn)化為json格式的字符串,需要把a(bǔ)scii碼自動(dòng)識(shí)別給關(guān)閉,要不然會(huì)出現(xiàn)下面的結(jié)果
json_conversion = json.dumps(parsed_data, ensure_ascii=False)
3.將json字符串寫入文件時(shí)候,需要指定編碼,否則在中文的地方會(huì)出現(xiàn)亂碼
with open(‘output.json', ‘w', encoding=“UTF-8”) as json_file
總結(jié)
到此這篇關(guān)于Python中XML轉(zhuǎn)JSON、XML轉(zhuǎn)字典的文章就介紹到這了,更多相關(guān)Python XML轉(zhuǎn)JSON、字典內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python 列表(List)的底層實(shí)現(xiàn)原理分析
這篇文章主要介紹了Python 列表(List)的底層實(shí)現(xiàn)原理分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03Python利用pangu模塊實(shí)現(xiàn)文本格式化小工具
其實(shí)使用pangu做文本格式標(biāo)準(zhǔn)化的業(yè)務(wù)代碼在之前就實(shí)現(xiàn)了,主要能夠?qū)⒅形奈谋疚臋n中的文字、標(biāo)點(diǎn)符號(hào)等進(jìn)行標(biāo)準(zhǔn)化。但是為了方便起來(lái)我們這里使用了Qt5將其做成了一個(gè)可以操作的頁(yè)面應(yīng)用,需要的可以了解一下2022-10-10Python?Asyncio庫(kù)之a(chǎn)syncio.task常用函數(shù)詳解
Asyncio在經(jīng)過(guò)一段時(shí)間的發(fā)展以及獲取Curio等第三方庫(kù)的經(jīng)驗(yàn)來(lái)提供更多的功能,目前高級(jí)功能也基本完善。本文主要介紹了Asyncio庫(kù)中asyncio.task常用函數(shù)的使用,需要的可以參考一下2023-03-03python中import cv2遇到的錯(cuò)誤及安裝方式
這篇文章主要介紹了python中import cv2遇到的錯(cuò)誤及安裝方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09使用 Python 處理 JSON 格式的數(shù)據(jù)
JSON 是一個(gè)很好的選擇。如果你對(duì) Python 有所了解,就更加事半功倍了。下面就來(lái)介紹一下如何使用 Python 處理 JSON 數(shù)據(jù)。感興趣的朋友跟隨小編一起看看吧2019-07-07