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ù)啟用擴(kuò)展功能:
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)中性能最強(qiáng)的 JSON 庫,適用于對速度要求嚴(yán)苛的場景。其特點包括:
- 極速的序列化/反序列化
- 原生支持日期、UUID、NumPy 等類型
- 內(nèi)存高效且線程安全
到此這篇關(guān)于Python JSON編碼/解碼庫orjson的用法詳解的文章就介紹到這了,更多相關(guān)Python orjson庫用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Python開發(fā)一個多線程IP網(wǎng)絡(luò)掃描工具
IP?Scanner?是一個基于?Python?開發(fā)的網(wǎng)絡(luò)掃描工具,它能夠快速掃描指定網(wǎng)段內(nèi)的活動?IP?地址,下面小編就來和大家詳細(xì)介紹一下它的具體實現(xiàn)方法吧2025-05-05
Python利用元類打造更優(yōu)雅的類屬性訪問機(jī)制
本文主要為大家詳細(xì)介紹了如何利用?Python?元類實現(xiàn)類屬性訪問,探討如何基于這一機(jī)制實現(xiàn)單例模式,并進(jìn)一步延伸為服務(wù)端模式,文章的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2026-05-05
淺談pandas.cut與pandas.qcut的使用方法及區(qū)別
這篇文章主要介紹了淺談pandas.cut與pandas.qcut的使用方法及區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03

