Python JSON編碼/解碼庫orjson的用法詳解
更新時間:2025年07月08日 10:34:47 作者:老胖閑聊
orjson是一個高性能的JSON編碼/解碼庫,專為Python設計,使用Rust實現(xiàn),相比標準庫的json模塊和其他第三方庫(如 ujson、simplejson),orjson在速度上有顯著優(yōu)勢,同時支持更豐富的原生數(shù)據(jù)類型,本文通過代碼示例給大家介紹的非常詳細,需要的朋友可以參考下
核心優(yōu)勢
- 極高性能:
- 比標準庫
json快 10~100 倍(尤其在大數(shù)據(jù)量時)。 - 反序列化速度超過
ujson,序列化速度接近 Rust/C 原生水平。
- 比標準庫
- 內存高效:
- 直接處理
bytes而非str,減少內存分配。
- 直接處理
- 嚴格符合標準:
- 符合 RFC 8259 和 ECMA-404 標準。
- 無 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,...}'
# 可選:轉為字符串
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. 處理復雜數(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
}
# 直接序列化(無需自定義轉換)
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)
# 標準庫速度測試
t_stdlib = timeit.timeit(lambda: json.dumps(data), number=1000)
print(f"orjson: {t_orjson:.4f} sec")
print(f"json: {t_stdlib:.4f} sec")
典型結果:
orjson: 0.02 sec json: 0.25 sec # 慢 10 倍以上
使用場景推薦
- 高吞吐量服務:API 服務器、微服務。
- 大數(shù)據(jù)處理:快速解析大型 JSON 文件。
- 科學計算:無縫集成 NumPy/Pandas。
- 替代
json:追求極致性能的通用場景。
注意事項
- 輸出類型:
dumps()返回bytes(非字符串),需手動解碼為str。
- 鍵排序:
- 默認不排序鍵,需用
option=orjson.OPT_SORT_KEYS。
- 默認不排序鍵,需用
- 錯誤處理:
- 無效輸入直接拋出
orjson.JSONDecodeError。
- 無效輸入直接拋出
總結
orjson 是 Python 生態(tài)中性能最強的 JSON 庫,適用于對速度要求嚴苛的場景。其特點包括:
- 極速的序列化/反序列化
- 原生支持日期、UUID、NumPy 等類型
- 內存高效且線程安全
到此這篇關于Python JSON編碼/解碼庫orjson的用法詳解的文章就介紹到這了,更多相關Python orjson庫用法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python中處理Excel數(shù)據(jù)的方法對比(pandas和openpyxl)
openpyxl?和?pandas在處理Excel數(shù)據(jù)時各有優(yōu)勢,選擇需結合具體場景,本文將從核心功能,性能,適用場景展等幾個不同的維度做個對比,感興趣的可以了解下2025-07-07
把項目從Python2.x移植到Python3.x的經驗總結
這篇文章主要介紹了把項目從Python2.x移植到Python3.x的經驗總結,包括作者所使用的Jinja2框架中一些需要注意的地方,需要的朋友可以參考下2015-04-04
Tortoise-orm信號實現(xiàn)及使用場景源碼詳解
這篇文章主要為大家介紹了Tortoise-orm信號實現(xiàn)及使用場景源碼詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03

