核心优势
- 极高性能:
- 比标准库
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 等类型
- 内存高效且线程安全
到此这篇关于python json编码/解码库orjson的用法详解的文章就介绍到这了,更多相关python orjson库用法内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论