Python json序列化解讀
更新時(shí)間:2025年03月18日 08:38:58 作者:jay丿
這篇文章主要介紹了Python json序列化解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
json 模塊
- JSON : 是 一種 輕量級(jí)的 數(shù)據(jù)交換格式 、獨(dú)立于編程語(yǔ)言的 數(shù)據(jù)格式。
- 數(shù)據(jù)格式 簡(jiǎn)單 、清晰。 便于 網(wǎng)絡(luò)間數(shù)據(jù)的傳輸。
json 序列化 基本使用方式
序列化
- Python中的對(duì)象轉(zhuǎn)成 JSON格式的字符串
import json ls = [{"name": "張三", "age": 20}, {"name": "李四", "age": 22}] jsonstr = json.dumps(ls) print(jsonstr)
dumps 方法中的參數(shù)
skipkeys
:JSON中 的鍵 只支持 字符串 、數(shù)字、布爾 、null 表示 ,如果 在 python 中 提供了不支持的鍵類型, 則 必須將 skipkeys 設(shè)置為 True
ls = [{"name": "張三", "age": 20, (1,2): 100, None: 1}, {"name": "李四", "age": 22}] jsonstr = json.dumps(ls, skipkeys=True) print(jsonstr)
ensure_ascii
: 對(duì) ascii 之外的數(shù)據(jù) 進(jìn)行 Unicode 編碼 , 如果希望不進(jìn)行編碼,可以設(shè)置為 False
ls = [{"name": "張三", "age": 20, (1,2): 100, None: 1}, {"name": "李四", "age": 22}] jsonstr = json.dumps(ls, skipkeys=True, ensure_ascii=False)
indent
: 對(duì) json 進(jìn)行美化, 值是 一個(gè) 數(shù)字 、推薦使用 4allow_nan
: 對(duì)序列化的數(shù)據(jù) 是否 支持 非數(shù) float(“nan”) 、 正無窮 float(“inf”) 、 負(fù)無窮 float(“-inf”)default
: 可以對(duì) 無法序列化的 對(duì)象 進(jìn)行 特殊處理 (在序列化的時(shí)候,無法處理的類型 會(huì)觸發(fā) default 函數(shù)的調(diào)用。)
import json class Person: def __init__(self, name, age): self.name = name self.age = age if __name__ == '__main__': p1 = Person(name="張三", age=20) # p1.__dict__ : 可以獲取一個(gè)對(duì)象的 字典表示形式。 p2 = Person(name="李四", age=21) p3 = Person(name="王五", age=22) p4 = Person(name="趙六", age=20) person_list = [p1, p2, p3, p4] # 使用 JSON 序列化 將數(shù)據(jù) 轉(zhuǎn)成 JSON字符串 json_string = json.dumps(person_list, ensure_ascii=False, default=lambda obj: obj.__dict__, indent=2) print(json_string)
cls
: 允許定義一個(gè)類 、該類需要 繼承 json.JSONEncoder ,并重寫 父類 中 default 方法, 解決數(shù)據(jù)無法序列化的問題。
from datetime import date, datetime class Person: def __init__(self, name, age, birth=None): self.name = name self.age = age self.birth = birth class JsonEncoder(json.JSONEncoder): def default(self, o): if hasattr(o, "__dict__"): return o.__dict__ if isinstance(o, date): return o.strftime('%Y-%m-%d') if isinstance(o, datetime): return o.strftime('%Y-%m-%d %H:%M:%S') return str(o) if __name__ == '__main__': p1 = Person(name="張三", age=20, birth=date(2000, 10, 10)) print(p1.__dict__) p2 = Person(name="李四", age=21) p3 = Person(name="王五", age=22) p4 = Person(name="趙六", age=20) person_list = [p1, p2, p3, p4] # 使用 JSON 序列化 將數(shù)據(jù) 轉(zhuǎn)成 JSON字符串 json_string = json.dumps(person_list, ensure_ascii=False, cls=JsonEncoder, indent=2) print(json_string)
- loads(string , object_hook=None)
import json from datetime import date, datetime # 創(chuàng)建一個(gè) json格式的字符串 string = '[{"name": "張三", "age": 20, "birth": "1990-10-10"}, {"name": "李四", "age": 20, "birth": "1990-10-10"}]' class Person: def __init__(self, name, age, birth=None): self.name = name self.age = age self.birth = birth def __repr__(self): return str(self.__dict__) def test(kwargs): if "birth" in kwargs: kwargs["birth"] = datetime.strptime(kwargs["birth"], '%Y-%m-%d').date() return Person(**kwargs) # 將 該字符串轉(zhuǎn)成列表 ls = json.loads(string, object_hook=test) print(ls)
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python爬蟲的數(shù)據(jù)庫(kù)連接問題【推薦】
這篇文章主要介紹了python爬蟲的數(shù)據(jù)庫(kù)連接問題,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06Python tkinter進(jìn)度條控件(Progressbar)的使用
這篇文章主要介紹了Python tkinter進(jìn)度條控件(Progressbar)的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04echarts動(dòng)態(tài)獲取Django數(shù)據(jù)的實(shí)現(xiàn)示例
本文主要介紹了echarts動(dòng)態(tài)獲取Django數(shù)據(jù)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08利用Python實(shí)現(xiàn)簡(jiǎn)單的驗(yàn)證碼處理
這篇文章主要介紹了利用Python實(shí)現(xiàn)簡(jiǎn)單的驗(yàn)證碼處理,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-06-06python爬取淘寶商品詳情頁(yè)數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了python爬取淘寶商品詳情頁(yè)數(shù)據(jù)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02