Python中最好用的json庫(kù)orjson用法詳解
1 簡(jiǎn)介
大家好,我們?cè)谌粘J褂?nbsp;Python 的過程中,經(jīng)常會(huì)使用 json 格式存儲(chǔ)一些數(shù)據(jù),尤其是在 web 開發(fā)中。而 Python 原生的 json 庫(kù)性能差、功能少,只能堪堪應(yīng)對(duì)簡(jiǎn)單輕量的 json 數(shù)據(jù)存儲(chǔ)轉(zhuǎn)換需求。
而本文我要給大家介紹的第三方 json 庫(kù) orjson ,在公開的各項(xiàng)基準(zhǔn)性能測(cè)試中,以數(shù)倍至數(shù)十倍的性能優(yōu)勢(shì)碾壓 json 、 ujson 、 rapidjson 、 simplejson 等其他 Python 庫(kù),且具有諸多額外功能,下面我們就來領(lǐng)略其常用方法吧~
2 orjson常用方法
orjson 支持 3.7 到 3.10 所有版本64位的 Python ,本文演示對(duì)應(yīng)的 orjson 的版本為 3.7.0 ,直接使用 pip install -U orjson 即可完成安裝。下面我們來對(duì) orjson 中的常用方法進(jìn)行演示:
2.1 序列化
與原生 json 庫(kù)類似,我們可以使用 orjson.dumps() 將 Python 對(duì)象序列化為 JSON 數(shù)據(jù),注意,略有不同的是, orjson 序列化的結(jié)果并不是 str 型而是 bytes 型,在下面的例子中,我們對(duì)包含一千萬個(gè)簡(jiǎn)單字典元素的列表進(jìn)行序列化, orjson 與 json 庫(kù)的耗時(shí)比較如下:
2.2 反序列化
將 JSON 數(shù)據(jù)轉(zhuǎn)換為 Python 對(duì)象的過程我們稱之為反序列化,使用 orjson.loads()
進(jìn)行操作,可接受 bytes 、 str 型等常見類型,在前面例子的基礎(chǔ)上我們添加反序列化的例子:
2.3 豐富的option選項(xiàng)
在 orjson 的序列化操作中,可以通過參數(shù) option 來配置諸多額外功能,常用的有:
- OPT_INDENT_2
通過配置 option=orjson.OPT_INDENT_2
,我們可以為序列化后的 JSON 結(jié)果添加2個(gè)空格的縮進(jìn)美化效果,從而彌補(bǔ)其沒有參數(shù) indent 的不足:
- OPT_OMIT_MICROSECONDS
orjson.dumps()
可以直接將 Python 中 datetime 、 time 等標(biāo)準(zhǔn)庫(kù)中的日期時(shí)間對(duì)象轉(zhuǎn)換成相應(yīng)的字符串,這是原生 json 庫(kù)做不到的,而通過配置 option=orjson.OPT_OMIT_MICROSECONDS
,可以將轉(zhuǎn)換結(jié)果后綴的毫秒部分省略掉:
- OPT_NON_STR_KEYS
當(dāng)需要序列化的對(duì)象存在非數(shù)值型鍵時(shí), orjson 默認(rèn)會(huì)拋出 TypeError 錯(cuò)誤,這時(shí)需要配置 option=orjson.OPT_NON_STR_KEYS
來強(qiáng)制將這些鍵轉(zhuǎn)換為字符型:
OPT_SERIALIZE_NUMPY
orjson 的一大重要特性是其可以將包含 numpy 中數(shù)據(jù)結(jié)構(gòu)對(duì)象的復(fù)雜對(duì)象,兼容性地轉(zhuǎn)換為 JSON 中的數(shù)組,配合 option=orjson.OPT_SERIALIZE_NUMPY
即可:
- OPT_SERIALIZE_UUID
除了可以自動(dòng)序列化 numpy 對(duì)象外, orjson 還支持對(duì) UUID 對(duì)象進(jìn)行轉(zhuǎn)換,在 orjson 3.0
之前的版本中,需要配合 option=orjson.OPT_SERIALIZE_UUID
,而本文演示的 3.X
版本則無需額外配置參數(shù):
- OPT_SORT_KEYS
通過配合參數(shù) option=orjson.OPT_SORT_KEYS
,可以對(duì)序列化后的結(jié)果自動(dòng)按照鍵進(jìn)行排序:
- 組合多種option
當(dāng)你的序列化操作需要涉及多種 option 功能時(shí),則可以使用 | 運(yùn)算符來組合多個(gè) option 參數(shù)即可:
2.4 針對(duì)dataclass、datetime添加自定義處理策略
當(dāng)你需要序列化的對(duì)象中涉及到 dataclass 自定義數(shù)據(jù)結(jié)構(gòu)時(shí),可以配合 orjson.OPT_PASSTHROUGH_DATACLASS
,再通過對(duì) default 參數(shù)傳入自定義處理函數(shù),來實(shí)現(xiàn)更為自由的數(shù)據(jù)轉(zhuǎn)換邏輯,譬如下面簡(jiǎn)單的例子中,我們可以利用此特性進(jìn)行原始數(shù)據(jù)的脫敏操作:
類似的,針對(duì) datetime 類型數(shù)據(jù),我們同樣可以配合 OPT_PASSTHROUGH_DATETIME
和自定義 default 函數(shù)實(shí)現(xiàn)日期自定義格式化轉(zhuǎn)換:
總結(jié)
到此這篇關(guān)于Python中最好用的json庫(kù)orjson用法的文章就介紹到這了,更多相關(guān)Python中json庫(kù)orjson內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 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ù)的操作指南
- Python中JSON庫(kù)詳細(xì)介紹與代碼示例詳解
相關(guān)文章
Python json格式化打印實(shí)現(xiàn)過程解析
這篇文章主要介紹了Python json格式化打印實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07Pandas實(shí)現(xiàn)一列數(shù)據(jù)分隔為兩列
這篇文章主要介紹了Pandas實(shí)現(xiàn)一列數(shù)據(jù)分隔為兩列,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05python爬蟲入門教程--HTML文本的解析庫(kù)BeautifulSoup(四)
Beautiful Soup是python的一個(gè)庫(kù),最主要的功能是從網(wǎng)頁(yè)抓取數(shù)據(jù)。下面這篇文章主要給大家介紹了python爬蟲之HTML文本的解析庫(kù)BeautifulSoup的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-05-05pandas使用get_dummies進(jìn)行one-hot編碼的方法
今天小編就為大家分享一篇pandas使用get_dummies進(jìn)行one-hot編碼的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07詳解Python3網(wǎng)絡(luò)爬蟲(二):利用urllib.urlopen向有道翻譯發(fā)送數(shù)據(jù)獲得翻譯結(jié)果
這篇文章主要介紹了Python3網(wǎng)絡(luò)爬蟲(二):利用urllib.urlopen向有道翻譯發(fā)送數(shù)據(jù)獲得翻譯結(jié)果,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05