Python中最好用的json庫orjson用法詳解
1 簡介
大家好,我們在日常使用 Python 的過程中,經常會使用 json 格式存儲一些數據,尤其是在 web 開發(fā)中。而 Python 原生的 json 庫性能差、功能少,只能堪堪應對簡單輕量的 json 數據存儲轉換需求。

而本文我要給大家介紹的第三方 json 庫 orjson ,在公開的各項基準性能測試中,以數倍至數十倍的性能優(yōu)勢碾壓 json 、 ujson 、 rapidjson 、 simplejson 等其他 Python 庫,且具有諸多額外功能,下面我們就來領略其常用方法吧~
2 orjson常用方法
orjson 支持 3.7 到 3.10 所有版本64位的 Python ,本文演示對應的 orjson 的版本為 3.7.0 ,直接使用 pip install -U orjson 即可完成安裝。下面我們來對 orjson 中的常用方法進行演示:
2.1 序列化
與原生 json 庫類似,我們可以使用 orjson.dumps() 將 Python 對象序列化為 JSON 數據,注意,略有不同的是, orjson 序列化的結果并不是 str 型而是 bytes 型,在下面的例子中,我們對包含一千萬個簡單字典元素的列表進行序列化, orjson 與 json 庫的耗時比較如下:

2.2 反序列化
將 JSON 數據轉換為 Python 對象的過程我們稱之為反序列化,使用 orjson.loads() 進行操作,可接受 bytes 、 str 型等常見類型,在前面例子的基礎上我們添加反序列化的例子:

2.3 豐富的option選項
在 orjson 的序列化操作中,可以通過參數 option 來配置諸多額外功能,常用的有:
- OPT_INDENT_2
通過配置 option=orjson.OPT_INDENT_2 ,我們可以為序列化后的 JSON 結果添加2個空格的縮進美化效果,從而彌補其沒有參數 indent 的不足:

- OPT_OMIT_MICROSECONDS
orjson.dumps() 可以直接將 Python 中 datetime 、 time 等標準庫中的日期時間對象轉換成相應的字符串,這是原生 json 庫做不到的,而通過配置 option=orjson.OPT_OMIT_MICROSECONDS ,可以將轉換結果后綴的毫秒部分省略掉:

- OPT_NON_STR_KEYS
當需要序列化的對象存在非數值型鍵時, orjson 默認會拋出 TypeError 錯誤,這時需要配置 option=orjson.OPT_NON_STR_KEYS 來強制將這些鍵轉換為字符型:

OPT_SERIALIZE_NUMPY
orjson 的一大重要特性是其可以將包含 numpy 中數據結構對象的復雜對象,兼容性地轉換為 JSON 中的數組,配合 option=orjson.OPT_SERIALIZE_NUMPY 即可:

- OPT_SERIALIZE_UUID
除了可以自動序列化 numpy 對象外, orjson 還支持對 UUID 對象進行轉換,在 orjson 3.0 之前的版本中,需要配合 option=orjson.OPT_SERIALIZE_UUID ,而本文演示的 3.X 版本則無需額外配置參數:

- OPT_SORT_KEYS
通過配合參數 option=orjson.OPT_SORT_KEYS ,可以對序列化后的結果自動按照鍵進行排序:

- 組合多種option
當你的序列化操作需要涉及多種 option 功能時,則可以使用 | 運算符來組合多個 option 參數即可:

2.4 針對dataclass、datetime添加自定義處理策略
當你需要序列化的對象中涉及到 dataclass 自定義數據結構時,可以配合 orjson.OPT_PASSTHROUGH_DATACLASS ,再通過對 default 參數傳入自定義處理函數,來實現更為自由的數據轉換邏輯,譬如下面簡單的例子中,我們可以利用此特性進行原始數據的脫敏操作:

類似的,針對 datetime 類型數據,我們同樣可以配合 OPT_PASSTHROUGH_DATETIME 和自定義 default 函數實現日期自定義格式化轉換:

總結
到此這篇關于Python中最好用的json庫orjson用法的文章就介紹到這了,更多相關Python中json庫orjson內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python爬蟲入門教程--HTML文本的解析庫BeautifulSoup(四)
Beautiful Soup是python的一個庫,最主要的功能是從網頁抓取數據。下面這篇文章主要給大家介紹了python爬蟲之HTML文本的解析庫BeautifulSoup的相關資料,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-05-05
pandas使用get_dummies進行one-hot編碼的方法
今天小編就為大家分享一篇pandas使用get_dummies進行one-hot編碼的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07
詳解Python3網絡爬蟲(二):利用urllib.urlopen向有道翻譯發(fā)送數據獲得翻譯結果
這篇文章主要介紹了Python3網絡爬蟲(二):利用urllib.urlopen向有道翻譯發(fā)送數據獲得翻譯結果,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-05-05

