Python JSON編碼/解碼庫orjson的用法詳解
核心優(yōu)勢
- 極高性能:
- 比標(biāo)準(zhǔn)庫
json
快 10~100 倍(尤其在大數(shù)據(jù)量時)。 - 反序列化速度超過
ujson
,序列化速度接近 Rust/C 原生水平。
- 比標(biāo)準(zhǔn)庫
- 內(nèi)存高效:
- 直接處理
bytes
而非str
,減少內(nèi)存分配。
- 直接處理
- 嚴(yán)格符合標(biāo)準(zhǔn):
- 符合 RFC 8259 和 ECMA-404 標(biāo)準(zhǔn)。
- 無 GIL 阻塞:
- 在序列化/反序列化時釋放 GIL,支持并發(fā)。
安裝
pip install orjson
要求:Python ≥ 3.7(支持 Linux/macOS/Windows)。
基本用法
1. 序列化(Python 對象 → JSON)
import orjson data = { "name": "Alice", "age": 30, "hobbies": ["coding", "hiking"], "is_active": True } # 序列化為 bytes json_bytes = orjson.dumps(data) print(json_bytes) # b'{"name":"Alice","age":30,...}' # 可選:轉(zhuǎn)為字符串 json_str = json_bytes.decode("utf-8")
2. 反序列化(JSON → Python 對象)
json_data = b'{"name": "Bob", "score": 95.5}' # 直接解析 bytes parsed = orjson.loads(json_data) print(parsed["name"]) # "Bob"
高級特性
1. 處理復(fù)雜數(shù)據(jù)類型
orjson
原生支持更多類型:
from datetime import datetime, timezone from uuid import uuid4 data = { "id": uuid4(), # UUID 對象 "created_at": datetime.now(timezone.utc) # 時區(qū)-aware datetime } # 直接序列化(無需自定義轉(zhuǎn)換) json_bytes = orjson.dumps(data)
2. 自定義選項
通過 option
參數(shù)啟用擴展功能:
json_bytes = orjson.dumps( data, option=orjson.OPT_NAIVE_UTC | # 將無時區(qū) datetime 視為 UTC orjson.OPT_SERIALIZE_NUMPY | # 支持 numpy 數(shù)組 orjson.OPT_SORT_KEYS # 按鍵排序輸出 )
3. 處理非 UTF-8 數(shù)據(jù)
# 序列化非 UTF-8 字符串(如 latin-1) data = {"text": "café".encode("latin-1")} json_bytes = orjson.dumps(data) # 自動處理
性能對比示例
import timeit import orjson import json data = {"value": [i for i in range(10000)]} # orjson 速度測試 t_orjson = timeit.timeit(lambda: orjson.dumps(data), number=1000) # 標(biāo)準(zhǔn)庫速度測試 t_stdlib = timeit.timeit(lambda: json.dumps(data), number=1000) print(f"orjson: {t_orjson:.4f} sec") print(f"json: {t_stdlib:.4f} sec")
典型結(jié)果:
orjson: 0.02 sec json: 0.25 sec # 慢 10 倍以上
使用場景推薦
- 高吞吐量服務(wù):API 服務(wù)器、微服務(wù)。
- 大數(shù)據(jù)處理:快速解析大型 JSON 文件。
- 科學(xué)計算:無縫集成 NumPy/Pandas。
- 替代
json
:追求極致性能的通用場景。
注意事項
- 輸出類型:
dumps()
返回bytes
(非字符串),需手動解碼為str
。
- 鍵排序:
- 默認(rèn)不排序鍵,需用
option=orjson.OPT_SORT_KEYS
。
- 默認(rèn)不排序鍵,需用
- 錯誤處理:
- 無效輸入直接拋出
orjson.JSONDecodeError
。
- 無效輸入直接拋出
總結(jié)
orjson
是 Python 生態(tài)中性能最強的 JSON 庫,適用于對速度要求嚴(yán)苛的場景。其特點包括:
- 極速的序列化/反序列化
- 原生支持日期、UUID、NumPy 等類型
- 內(nèi)存高效且線程安全
到此這篇關(guān)于Python JSON編碼/解碼庫orjson的用法詳解的文章就介紹到這了,更多相關(guān)Python orjson庫用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解python如何提取瀏覽器中保存的網(wǎng)站登錄用戶名密碼
很多瀏覽器都貼心地提供了保存用戶密碼功能,用戶一旦開啟,就不需要每次都輸入用戶名、密碼,非常方便,作為python腳本,能否拿到用戶提前保存在瀏覽器中的用戶名密碼,用以自動登錄呢,下面我們就來看看吧2023-08-08Python中處理Excel數(shù)據(jù)的方法對比(pandas和openpyxl)
openpyxl?和?pandas在處理Excel數(shù)據(jù)時各有優(yōu)勢,選擇需結(jié)合具體場景,本文將從核心功能,性能,適用場景展等幾個不同的維度做個對比,感興趣的可以了解下2025-07-07把項目從Python2.x移植到Python3.x的經(jīng)驗總結(jié)
這篇文章主要介紹了把項目從Python2.x移植到Python3.x的經(jīng)驗總結(jié),包括作者所使用的Jinja2框架中一些需要注意的地方,需要的朋友可以參考下2015-04-04Tortoise-orm信號實現(xiàn)及使用場景源碼詳解
這篇文章主要為大家介紹了Tortoise-orm信號實現(xiàn)及使用場景源碼詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03