Python json序列化解讀
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中isdigit() isalpha()用于判斷字符串的類型問題
這篇文章主要介紹了python中isdigit() isalpha()用于判斷字符串的類型問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
Django后臺(tái)管理系統(tǒng)的圖文使用教學(xué)
在本篇文章里小編給大家整理的是一篇關(guān)于Django后臺(tái)管理系統(tǒng)的圖文使用教學(xué)內(nèi)容,需要的朋友們參考下。2020-01-01
Pandas庫(kù)中dataframe.corr()函數(shù)的使用
dataframe.corr()是Pandas庫(kù)中的一個(gè)函數(shù),用于計(jì)算DataFrame中各列之間的相關(guān)系數(shù),本文主要介紹了Pandas庫(kù)中dataframe.corr()函數(shù)的使用,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07
使用Python將Markdown格式轉(zhuǎn)為EPUB電子書格式的代碼實(shí)現(xiàn)
我們每天都會(huì)接觸到大量的文本內(nèi)容,無論是收藏的技術(shù)文檔、自己撰寫的筆記,還是網(wǎng)絡(luò)上的優(yōu)質(zhì)文章,都可能面臨閱讀體驗(yàn)不佳的問題,所以本文給大家介紹了使用Python將Markdown格式轉(zhuǎn)為EPUB電子書格式的實(shí)現(xiàn)方法,需要的朋友可以參考下2025-04-04
Ubuntu配置Python環(huán)境的超詳細(xì)教程
這篇文章主要給大家介紹了關(guān)于Ubuntu配置Python環(huán)境的超詳細(xì)教程,文中通過代碼示例將配置的過程介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-08-08
python實(shí)現(xiàn)將英文單詞表示的數(shù)字轉(zhuǎn)換成阿拉伯?dāng)?shù)字的方法
這篇文章主要介紹了python實(shí)現(xiàn)將英文單詞表示的數(shù)字轉(zhuǎn)換成阿拉伯?dāng)?shù)字的方法,涉及Python字符串轉(zhuǎn)換操作的相關(guān)技巧,需要的朋友可以參考下2015-07-07
python pip安裝包出現(xiàn):Failed building wheel for xxx錯(cuò)誤的解決
今天小編就為大家分享一篇python pip安裝包出現(xiàn):Failed building wheel for xxx錯(cuò)誤的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12
Python實(shí)現(xiàn)字典按照value進(jìn)行排序的方法分析
這篇文章主要介紹了Python實(shí)現(xiàn)字典按照value進(jìn)行排序的方法,結(jié)合實(shí)例形式分析了Python字典按照value進(jìn)行排序的相關(guān)操作技巧,需要的朋友可以參考下2017-12-12

