Python中最好用的json庫orjson用法詳解
1 簡(jiǎn)介
大家好,我們?cè)谌粘J褂?nbsp;Python 的過程中,經(jīng)常會(huì)使用 json 格式存儲(chǔ)一些數(shù)據(jù),尤其是在 web 開發(fā)中。而 Python 原生的 json 庫性能差、功能少,只能堪堪應(yīng)對(duì)簡(jiǎn)單輕量的 json 數(shù)據(jù)存儲(chǔ)轉(zhuǎn)換需求。
而本文我要給大家介紹的第三方 json 庫 orjson ,在公開的各項(xiàng)基準(zhǔn)性能測(cè)試中,以數(shù)倍至數(shù)十倍的性能優(yōu)勢(shì)碾壓 json 、 ujson 、 rapidjson 、 simplejson 等其他 Python 庫,且具有諸多額外功能,下面我們就來領(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 庫類似,我們可以使用 orjson.dumps() 將 Python 對(duì)象序列化為 JSON 數(shù)據(jù),注意,略有不同的是, orjson 序列化的結(jié)果并不是 str 型而是 bytes 型,在下面的例子中,我們對(duì)包含一千萬個(gè)簡(jiǎn)單字典元素的列表進(jìn)行序列化, orjson 與 json 庫的耗時(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)庫中的日期時(shí)間對(duì)象轉(zhuǎn)換成相應(yīng)的字符串,這是原生 json 庫做不到的,而通過配置 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庫orjson用法的文章就介紹到這了,更多相關(guān)Python中json庫orjson內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)以時(shí)間換空間的緩存替換算法
緩存是指可以進(jìn)行高速數(shù)據(jù)交換的存儲(chǔ)器,它先于內(nèi)存與CPU交換數(shù)據(jù),因此速度很快。緩存就是把一些數(shù)據(jù)暫時(shí)存放于某些地方,可能是內(nèi)存,也有可能硬盤。下面給大家介紹Python實(shí)現(xiàn)以時(shí)間換空間的緩存替換算法,需要的朋友參考下2016-02-02win7上tensorflow2.2.0安裝成功 引用DLL load failed時(shí)找不到指定模塊 tensorflo
這篇文章主要介紹了win7上tensorflow2.2.0安裝成功 引用時(shí)DLL load failed找不到指定模塊 tensorflow has no attribute xxx 解決方法,需要的朋友可以參考下2020-05-05python中sqllite插入numpy數(shù)組到數(shù)據(jù)庫的實(shí)現(xiàn)方法
本文給大家介紹python中sqllite插入numpy數(shù)組到數(shù)據(jù)庫的實(shí)現(xiàn)方法,在文章底部給大家提到了Python 操作sqlite數(shù)據(jù)庫及保存查詢numpy類型數(shù)據(jù)的實(shí)例代碼,需要的朋友參考下吧2021-06-06Python實(shí)現(xiàn)"驗(yàn)證回文串"的幾種方法
這篇文章主要介紹了Python實(shí)現(xiàn)"驗(yàn)證回文串"的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03python實(shí)現(xiàn)加密的方式總結(jié)
這篇文章主要介紹了python實(shí)現(xiàn)加密的方式總結(jié),文中給大家提到了python中加密的注意點(diǎn),通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01