Python中JSON庫(kù)詳細(xì)介紹與代碼示例詳解
1. 前言
在我們?nèi)粘5?Python 編程中,數(shù)據(jù)的存儲(chǔ)與傳遞是不可避免的一個(gè)環(huán)節(jié)。想象一下,我們?cè)陂_發(fā)一個(gè)應(yīng)用程序時(shí),需要將一些配置信息存儲(chǔ)起來,或者要將數(shù)據(jù)發(fā)送到另一個(gè)系統(tǒng)中。這時(shí)候,我們就需要一種高效、便捷的方式來完成這個(gè)。任務(wù)JSON(JavaScript Object Notation),作為一種輕量級(jí)的數(shù)據(jù)交換格式,正好能滿足我們的需求。而 Python 中的 json 庫(kù),則為我們提供了簡(jiǎn)單易用的接口來處理 JSON 數(shù)據(jù)。
2. json 庫(kù)基本概念
JSON 是一種基于文本格式的數(shù)據(jù)表示方法,易于和閱讀編寫,同時(shí)也易于機(jī)器解析和生成。它基于 JavaScript 的一個(gè)子集,但已經(jīng)成為一種獨(dú)立的數(shù)據(jù)格式,被廣泛應(yīng)用于各種編程語言中。在 Python 中,json 庫(kù)就是專門用于處理 JSON 數(shù)據(jù)的。
JSON 數(shù)據(jù)結(jié)構(gòu)主要包括以下兩種基本類型:
對(duì)象 (Object) :一組無序的鍵值對(duì),類似于 Python 中的字典。例如:{"name": "John", "age": 30}
,其中 "name" 和 "age" 是鍵,對(duì)應(yīng)的值分別是 "John" 和 30 。
數(shù)組(Array) :一個(gè)有序的值的集合,類似于 Python 中的列表。例如:[1, 2, 3, 4]
。
json 庫(kù)的核心功能就是實(shí)現(xiàn) Python 數(shù)據(jù)類型與 JSON 數(shù)據(jù)類型的相互轉(zhuǎn)換。
3. json 的適應(yīng)場(chǎng)景
數(shù)據(jù)存儲(chǔ) :將數(shù)據(jù)以 JSON 格式存儲(chǔ)到文件或數(shù)據(jù)庫(kù)中,便于后續(xù)讀取和修改。例如,保存配置文件、用戶數(shù)據(jù)等。
數(shù)據(jù)交換 :在不同的系統(tǒng)或組件之間傳遞數(shù)據(jù),特別是在 開 Web發(fā)中,前后端之間常用 JSON 格式進(jìn)行數(shù)據(jù)交互。
API 數(shù)據(jù)處理 :許多 Web API 返回的數(shù)據(jù)都是 JSON 格式,使用 json 庫(kù)可以方便地解析和處理這些數(shù)據(jù)。
4. json 庫(kù)的基本用法
4.1 導(dǎo) json入 模塊
在 Python 中,我們可以直接使用內(nèi)置的 json 模塊,無需額外安裝。通過以下代碼導(dǎo)入 json 模塊:
import json
4.2 將 Python 對(duì)象轉(zhuǎn)換為 JSON 字符串
使用 json.dumps()
方法將可以 Python 對(duì)象(如字典、列表等)轉(zhuǎn)換為 JSON 格式的字符串。這個(gè)方法的語法如下:
json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None default,=None, sort_keys=False, **kw)
其中,obj
是要轉(zhuǎn)換的 Python 對(duì)象,其他參數(shù)用于控制轉(zhuǎn)換過程中的各種選項(xiàng)。
示例 :
data = { "name": "John", "age": 03, "city": "New York" } json_str = json.dumps(data) print(json_str)
輸出結(jié)果:
{"name": "John", "age": 30, "city": "New York"}
可以看到,Python 字典被成功轉(zhuǎn)換為 JSON 格式的字符串。
4.3 將 JSON 字符串轉(zhuǎn)換為 Python 對(duì)象
使用 json.loads()
方法可以將 JSON 格字符串式的轉(zhuǎn)換為 Python 對(duì)象。這個(gè)方法的語法如下:
json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
其中,s
是 JSON 格式的字符串。
示例 :
json_str = '{"name": "John", "age": 30, "city": "New York"}' data = json.loads(json_str) print(data) print(type(data))
輸出結(jié)果:
{'name': 'John', 'age': 30, 'city': 'New York'} <class 'dict'>
JSON 字符串被轉(zhuǎn)換為 字 Python典。
4.4 將 Python 對(duì)象寫入 JSON 文件
使用 json.dump()
方法可以直接將 Python 對(duì)象寫入到 JSON 文件中。這個(gè)方法的語法如下:
json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
其中,obj
是要寫入的 Python 對(duì)象,fp
是一個(gè)文件對(duì)象。
示例 :
data = { "name": "John", "age": 30, "city": "New York" } with open("data.json", "w") as f: json.dump(data, f)
這段代碼將 Python 字典寫入到名為 “data.json” 的文件中。
4.5 從 JSON 文件讀取數(shù)據(jù)
使用 json.load()
方法可以從 JSON 文件中讀取數(shù)據(jù)并轉(zhuǎn)換為 Python 對(duì)象。這個(gè)方法的語法如下:
json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
其中,fp
是一個(gè)文件對(duì)象。
示例 :
with open("data.json", "r") as f: data = json.load(f) print(data)
讀取 “data.json” 文件中的數(shù)據(jù)并打印出來。
4.6 json 的其他方法
除了上述常用的 dumps()
、loads()
、dump()
和 load()
方法外,json 庫(kù)還提供了一些其他方法和常量,用于處理特殊情況。
json.JSONEncoder
和json.JSONDecoder
:這兩個(gè)類分別用于自定義 JSON 編碼器和解碼器,可以處理一些特殊的類型轉(zhuǎn)換問題。json.JSONDecodeError
:當(dāng)解析 JSON 數(shù)據(jù)出錯(cuò)時(shí),會(huì)拋出這個(gè)異常,我們可以使用它來進(jìn)行錯(cuò)誤處理。
5. json 庫(kù)的高級(jí)用法
5.1 自定義對(duì)象的序列化與反序列化在
實(shí)際開發(fā)中,我們可能會(huì)遇到需要序列化自定義對(duì)象的情況。默認(rèn)情況下,json 庫(kù)無法直接序列化自定義對(duì)象,但我們可以自定義一個(gè)編碼器來實(shí)現(xiàn)這個(gè)功能。
import json class Person: def __init__(self, name, age): self.name = name self.age = age class PersonEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, Person): return {"name": obj.name, "age": obj.age} return super().default(obj) person = Person("John", 30) json_str = json.dumps(person, cls=PersonEncoder) print(json_str)
輸出結(jié)果:
{"name": "John", "age": 30}
我們可以看到通過,自定義編碼器,成功將自定義的 Person 對(duì)象序列化為 JSON 字符串。同樣地,我們也可以通過自定義解碼器來實(shí)現(xiàn) JSON 字符串到自定義對(duì)象的反序列化。
5.2 處理非 ASCII 字符
在處理包含非 ASCII 字符的 JSON 數(shù)據(jù)時(shí),我們可以使用 ensure_ascii
參數(shù)來控制是否將非 ASCII 字符轉(zhuǎn)義。默認(rèn)情況下,ensure_ascii
參數(shù)為 True,非 ASCII 字符會(huì)被轉(zhuǎn)義為 Unicode 編碼。
data = {"name": "張三", "city": "北京"} json_str = json.dumps(data, ensure_ascii=False) print(json_str)
輸出結(jié)果:
{"name": "張三", "city": "北京"}
當(dāng) ensure_ascii
參數(shù)為 False 時(shí),非 ASCII 字符會(huì)以原始形式輸出,這樣更便于閱讀和理解。
5.3 使用 indent 參數(shù)美化輸出
在調(diào)試或閱讀 JSON 數(shù)據(jù)時(shí),我們可以通過設(shè)置 indent
參數(shù)來美化 JSON 輸出的格式,使其更易于和閱讀。indent 參數(shù)指定了縮進(jìn)的空格數(shù)。
data = { "name": "John", "age": 30, "hobbies": ["reading", "traveling", "sports"] } json_str = json.dumps(data, indent=4) print(json_str)
輸出結(jié)果:
{ "name": "John", "age": 30, "hobbies": [ "reading", "traveling", "sports" ] }
可以看到,通過設(shè)置 indent
參數(shù),輸出的 JSON 數(shù)據(jù)格式更加清晰美觀。
6. json 庫(kù)的異常處理
在使用 json 庫(kù)進(jìn)行數(shù)據(jù)處理時(shí),可能會(huì)遇到一些異常情況例如,無效的 JSON 格式、不支持的數(shù)據(jù)類型等。我們需要對(duì)這些異常進(jìn)行有效的處理,以確保程序的健壯性。
6.1 常見的異常類型
json.JSONDecodeError
:當(dāng)解析 JSON 數(shù)據(jù)出錯(cuò)時(shí)拋出,例如 JSON 格式不正確。TypeError
:當(dāng)嘗試序列化一個(gè)不支持的數(shù)據(jù)類型時(shí)拋出。
6.2 異常處理示例
import json json_str = '{"name": "John", "age": 30, "hobbies": ["reading", "traveling"]' try: data = json.loads(json_str) except json.JSONDecodeError as e: print(f"JSON 解碼錯(cuò)誤:{e}") except Exception as e: print(f"發(fā)生錯(cuò)誤:{e}")
輸出結(jié)果:
JSON 解碼錯(cuò)誤:Expecting ',' delimiter: line 1 column 46 (char 45)
通過捕獲異常,我們可以及時(shí)發(fā)現(xiàn)并處理問題,避免程序崩潰。
7. 總結(jié)
json 庫(kù)作為 Python 的內(nèi)置模塊,是我們?cè)谶M(jìn)行數(shù)據(jù)存儲(chǔ)、傳遞和交換時(shí)不可或缺的工具之一。其為我們提供了簡(jiǎn)單而強(qiáng)大的工具來處理 JSON 數(shù)據(jù)。它不僅能夠輕松地實(shí)現(xiàn) Python 對(duì)象與 JSON 數(shù)據(jù)之間的相互轉(zhuǎn)換,還提供了豐富的參數(shù)和方法來滿足各種復(fù)雜的需求。
到此這篇關(guān)于Python中JSON庫(kù)詳細(xì)介紹與代碼示例的文章就介紹到這了,更多相關(guān)Python中JSON庫(kù)詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python中最好用的json庫(kù)orjson用法詳解
- Python使用JSON庫(kù)解析JSON數(shù)據(jù)的方法
- 全面掌握Python?JSON庫(kù)函數(shù)與方法學(xué)會(huì)JSON數(shù)據(jù)處理
- python標(biāo)準(zhǔn)庫(kù)模塊之json庫(kù)的基礎(chǔ)用法
- Mac系統(tǒng)中Anaconda環(huán)境配置Python json庫(kù)的方法詳解
- Python中利用json庫(kù)進(jìn)行JSON數(shù)據(jù)處理詳解
- Python中的json庫(kù)常用方法示例詳解
- Python中json庫(kù)的操作指南
相關(guān)文章
pandas數(shù)據(jù)分組groupby()和統(tǒng)計(jì)函數(shù)agg()的使用
這篇文章主要介紹了pandas數(shù)據(jù)分組groupby()和統(tǒng)計(jì)函數(shù)agg()的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Python實(shí)現(xiàn)構(gòu)建一個(gè)儀表板的示例代碼
這篇文章主要為大家詳細(xì)介紹了Python如何實(shí)現(xiàn)構(gòu)建一個(gè)儀表板,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以了解一下2023-03-03詳談Python基礎(chǔ)之內(nèi)置函數(shù)和遞歸
下面小編就為大家?guī)硪黄狿ython基礎(chǔ)之內(nèi)置函數(shù)和遞歸。小編覺得挺不錯(cuò)的?,F(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06Python實(shí)現(xiàn)Word和TXT文件格式之間的相互轉(zhuǎn)換
Word文檔(.doc或.docx)和純文本文件(.txt)是兩種常用的文件格式,本文將詳細(xì)介紹如何使用Python實(shí)現(xiàn)Word和TXT文件格式之間的相互轉(zhuǎn)換,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下2024-07-07PyTorch搭建ANN實(shí)現(xiàn)時(shí)間序列風(fēng)速預(yù)測(cè)
這篇文章主要為大家介紹了PyTorch搭建ANN實(shí)現(xiàn)時(shí)間序列風(fēng)速預(yù)測(cè),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05一鍵搞定python連接mysql驅(qū)動(dòng)有關(guān)問題(windows版本)
這篇文章主要介紹了對(duì)于mysql驅(qū)動(dòng)問題折騰了一下午,現(xiàn)共享出解決方案,需要的朋友可以參考下2016-04-04