Python中最好用的json庫orjson用法詳解

1 簡介

大傢好,我們在日常使用 Python 的過程中,經常會使用 json 格式存儲一些數據,尤其是在 web 開發中。而 Python 原生的 json 庫性能差、功能少,隻能堪堪應對簡單輕量的 json 數據存儲轉換需求。

而本文我要給大傢介紹的第三方 json 庫 orjson ,在公開的各項基準性能測試中,以數倍至數十倍的性能優勢碾壓 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內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: