文章目录
- 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”)
- json_data = b'{“name”: “Bob”, “score”: 95.5}’ # 直接解析 bytes parsed = orjson.loads(json_data) print(parsed[“name”]) # “Bob”
- 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)
- 通过 option 参数启用扩展功能: json_bytes = orjson.dumps( data, option=orjson.OPT_NAIVE_UTC | # 将无时区 datetime 视为 UTC orjson.OPT_SERIALIZE_NUMPY | # 支持 numpy 数组 orjson.OPT_SORT_KEYS # 按键排序输出 )
- # 序列化非 UTF-8 字符串(如 latin-1) data = {“text”: “café”.encode(“latin-1”)} json_bytes = orjson.dumps(data) # 自动处理
目录
- 核心优势
- 安装
- 基本用法
- 1. 序列化(Python 对象 → JSON)
- 2. 反序列化(JSON → Python 对象)
- 高级特性
- 1. 处理复杂数据类型
- 2. 自定义选项
- 3. 处理非 UTF-8 数据
- 性能对比示例
- 使用场景推荐
- 注意事项
- 总结
- 极高性能:
- 比标准库
json 快 10~100 倍(尤其在大数据量时)。
- 反序列化速度超过
ujson,序列化速度接近 Rust/C 原生水平。
- 内存高效:
- 直接处理
bytes 而非 str,减少内存分配。
- 严格符合标准:
- 符合 RFC 8259 和 ECMA-404 标准。
- 无 GIL 阻塞:
- 在序列化/反序列化时释放 GIL,支持并发。
- 比标准库
json快 10~100 倍(尤其在大数据量时)。 - 反序列化速度超过
ujson,序列化速度接近 Rust/C 原生水平。
- 直接处理
bytes而非str,减少内存分配。
- 符合 RFC 8259 和 ECMA-404 标准。
- 在序列化/反序列化时释放 GIL,支持并发。
pip install orjson
要求:Python ≥ 3.7(支持 Linux/macOS/Windows)。
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")
json_data = b'{"name": "Bob", "score": 95.5}'
# 直接解析 bytes
parsed = orjson.loads(json_data)
print(parsed["name"]) # "Bob"
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)
通过 option 参数启用扩展功能:
json_bytes = orjson.dumps(
data,
option=orjson.OPT_NAIVE_UTC | # 将无时区 datetime 视为 UTC
orjson.OPT_SERIALIZE_NUMPY | # 支持 numpy 数组
orjson.OPT_SORT_KEYS # 按键排序输出
)
# 序列化非 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:追求极致性能的通用场景。
json:追求极致性能的通用场景。
- 输出类型:
dumps() 返回 bytes(非字符串),需手动解码为 str。
- 键排序:
- 默认不排序键,需用
option=orjson.OPT_SORT_KEYS。
- 错误处理:
- 无效输入直接抛出
orjson.JSONDecodeError。
dumps()返回bytes(非字符串),需手动解码为str。
- 默认不排序键,需用
option=orjson.OPT_SORT_KEYS。
- 无效输入直接抛出
orjson.JSONDecodeError。
orjson 是 Python 生态中性能最强的 JSON 库,适用于对速度要求严苛的场景。其特点包括:
- 极速的序列化/反序列化
- 原生支持日期、UUID、NumPy 等类型
- 内存高效且线程安全
到此这篇关于Python JSON编码/解码库orjson的用法详解的文章就介绍到这了,更多相关Python orjson库用法内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!
您可能感兴趣的文章:
- Python中最好用的json库orjson用法详解
- Python中JSON库详细介绍与代码示例详解
- Python中利用json库进行JSON数据处理详解
- 全面掌握Python JSON库函数与方法学会JSON数据处理
- Python中的json库常用方法示例详解