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

