orjson
是一个高性能的 JSON 编码/解码库,专为 Python 设计,使用 Rust 实现。相比标准库的 json
模块和其他第三方库(如 ujson
、simplejson
),orjson
在速度上有显著优势,同时支持更丰富的原生数据类型。
核心优势
- 极高性能:
- 比标准库
json
快 10~100 倍(尤其在大数据量时)。 - 反序列化速度超过
ujson
,序列化速度接近 Rust/C 原生水平。
- 比标准库
- 内存高效:
- 直接处理
bytes
而非str
,减少内存分配。
- 直接处理
- 严格符合标准:
- 符合 RFC 8259 和 ECMA-404 标准。
- 无 GIL 阻塞:
- 在序列化/反序列化时释放 GIL,支持并发。
安装
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. 处理复杂数据类型
orjson
原生支持更多类型:
from datetime import datetime, timezone
from uuid import uuid4
data = {
"id": uuid4(), # UUID 对象
"created_at": datetime.now(timezone.utc) # 时区-aware datetime
}
# 直接序列化(无需自定义转换)
json_bytes = orjson.dumps(data)
2. 自定义选项
通过 option
参数启用扩展功能:
json_bytes = orjson.dumps(
data,
option=orjson.OPT_NAIVE_UTC | # 将无时区 datetime 视为 UTC
orjson.OPT_SERIALIZE_NUMPY | # 支持 numpy 数组
orjson.OPT_SORT_KEYS # 按键排序输出
)
3. 处理非 UTF-8 数据
# 序列化非 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 服务器、微服务。
- 大数据处理:快速解析大型 JSON 文件。
- 科学计算:无缝集成 NumPy/Pandas。
- 替代
json
:追求极致性能的通用场景。
注意事项
- 输出类型:
dumps()
返回bytes
(非字符串),需手动解码为str
。
- 键排序:
- 默认不排序键,需用
option=orjson.OPT_SORT_KEYS
。
- 默认不排序键,需用
- 错误处理:
- 无效输入直接抛出
orjson.JSONDecodeError
。
- 无效输入直接抛出
总结
orjson
是 Python 生态中性能最强的 JSON 库,适用于对速度要求严苛的场景。其特点包括:
- 极速的序列化/反序列化
- 原生支持日期、UUID、NumPy 等类型
- 内存高效且线程安全