Python中XML轉JSON、XML轉字典代碼示例
前言
今天我們將學習如何在 Python 中將 XML 轉換為 JSON 和 XML 轉換為字典。我們可以使用 Python 的 xmltodict 模塊來讀取 XML 文件并將其轉換為字典或 JSON 數據。我們還可以在大型 XML 文件上進行流式處理,并將其轉換為字典。在進入編碼部分之前,讓我們首先了解為什么需要進行 XML 轉換。
將 XML 轉換為字典/JSON
XML 文件已經逐漸過時,但在網絡上仍然有許多大型系統(tǒng)在使用這種格式。XML 比 JSON 更重,因此大多數開發(fā)人員更喜歡在其應用程序中使用后者。當應用程序需要理解任何來源提供的 XML 時,將其轉換為 JSON 可能是一項繁瑣的任務。Python 中的 xmltodict 模塊使這項任務變得非常簡單和直觀。
開始使用 xmltodict
我們可以開始使用 xmltodict 模塊,但首先需要安裝它。我們將主要使用 pip 來進行安裝。
安裝 xmltodict 模塊
以下是我們如何使用 Python 包索引(pip)安裝 xmltodict 模塊:
pip install xmltodict
由于 xmltodict 是一個非常輕量級的模塊,因此安裝速度會很快。這是此安裝的輸出:!python install xmltodict module 最好的一點是,該模塊不依賴于任何其他外部模塊,因此它是輕量級的,并且避免了任何版本沖突。僅供演示,在基于 Debian 的系統(tǒng)上,可以使用 apt 工具輕松安裝此模塊:
sudo apt install python-xmltodict
另一個優(yōu)點是該模塊有一個官方的 Debian 軟件包。
Python XML 轉換為 JSON
嘗試此模塊的最佳方法是執(zhí)行其最初設計的操作之一,即執(zhí)行 XML 到 JSON 的轉換。讓我們看一下如何完成此操作的代碼片段:
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(...) 函數將 XML 數據轉換為 JSON,然后我們使用 json 模塊以更好的格式打印 JSON。
將 XML 文件轉換為 JSON
將 XML 數據直接放在代碼中既不總是可能的,也不現實。通常,我們將數據保存在數據庫或某些文件中。我們也可以直接選擇文件并將其轉換為 JSON。讓我們看一下如何使用 XML 文件執(zhí)行轉換的代碼片段:
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 在這里,我們使用另一個模塊 pprint 以格式化的方式打印輸出。除此之外,使用 open(...) 函數非常直觀,我們使用它來獲取文件描述符,然后將文件解析為 JSON 對象。
Python XML 轉換為字典
正如模塊名稱本身所暗示的那樣,xmltodict 實際上將我們提供的 XML 數據轉換為一個簡單的 Python 字典。因此,我們也可以簡單地使用字典鍵訪問數據。以下是一個示例程序:
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 因此,標簽可以作為鍵使用,同時屬性鍵也可以使用 @ 符號作為前綴。
支持 XML 中的命名空間
在 XML 數據中,通常有一組命名空間,用于定義 XML 文件提供的數據范圍。在轉換為 JSON 格式時,有必要讓這些命名空間在 JSON 格式中保持不變。讓我們考慮這個示例 XML 文件:
<root xmlns="https://defaultns.com/"
xmlns:a="https://a.com/">
<audience>
<id what="attribute">123</id>
<name>Shubham</name>
</audience>
</root>
以下是一個示例程序,演示了如何在 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 轉 XML 轉換
盡管將 XML 轉換為 JSON 是該模塊的主要目標,但 xmltodict 也支持執(zhí)行相反的操作,將 JSON 轉換為 XML 格式。我們將在程序中提供 JSON 數據。以下是一個示例程序:
import xmltodict
student = {
"data" : {
"name" : "Shubham",
"marks" : {
"math" : 92,
"english" : 99
},
"id" : "s387hs3"
}
}
print(xmltodict.unparse(student, pretty=True))
讓我們看看這個程序的輸出:!python json to xml 請注意,為了使其正常工作,必須提供單個 JSON 鍵。如果我們考慮修改我們的程序,使其在數據的第一級包含多個 JSON 鍵,如下所示:
import xmltodict
student = {
"name" : "Shubham",
"marks" : {
"math" : 92,
"english" : 99
},
"id" : "s387hs3"
}
print(xmltodict.unparse(student, pretty=True))
在這種情況下,我們在根級別有三個鍵。如果我們嘗試對這種形式的 JSON 進行解析,將會遇到以下錯誤:!python json to xml unparse error。這是因為 xmltodict 需要使用第一個鍵構造 XML,作為根 XML 標簽。這意味著在數據的根級別只能有一個 JSON 鍵。
結論
在本課程中,我們學習了一個出色的 Python 模塊,可用于解析和轉換 XML 為 JSON,反之亦然。我們還學習了如何使用 xmltodict 模塊將 XML 轉換為字典。
需要注意的點
1.讀取xml文件的時候,如果里面包含中文,要指定編碼格式
with open(‘input1.xml', encoding=“UTF-8”) as xml_file
2.將字典類型轉化為json格式的字符串,需要把ascii碼自動識別給關閉,要不然會出現下面的結果
json_conversion = json.dumps(parsed_data, ensure_ascii=False)

3.將json字符串寫入文件時候,需要指定編碼,否則在中文的地方會出現亂碼
with open(‘output.json', ‘w', encoding=“UTF-8”) as json_file

總結
到此這篇關于Python中XML轉JSON、XML轉字典的文章就介紹到這了,更多相關Python XML轉JSON、字典內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python?Pandas中DataFrame.drop_duplicates()刪除重復值詳解
在實際處理數據中,數據預處理操作中,常常需要去除掉重復的數據,這篇文章主要給大家介紹了關于Python?Pandas中DataFrame.drop_duplicates()刪除重復值的相關資料,需要的朋友可以參考下2022-07-07
Python 出現錯誤TypeError: ‘NoneType’ object is not iterable解決辦法
這篇文章主要介紹了Python 出現錯誤TypeError: ‘NoneType’ object is not iterable解決辦法的相關資料,需要的朋友可以參考下2017-01-01
Python使用pysmb庫訪問Windows共享文件夾的詳細教程
本教程旨在幫助您使用pysmb庫,通過SMB(Server Message Block)協(xié)議,輕松連接到Windows共享文件夾,并列舉其中的文件與文件夾,此外,我們還將簡要介紹如何下載和上傳文件,以及如何處理可能遇到的連接錯誤,需要的朋友可以參考下2024-12-12

