当前位置: 代码网 > it编程>前端脚本>Python > Python JSON编码/解码库orjson的用法详解

Python JSON编码/解码库orjson的用法详解

2025年07月08日 Python 我要评论
核心优势极高性能:比标准库 json 快 10~100 倍(尤其在大数据量时)。反序列化速度超过 ujson,序列化速度接近 rust/c 原生水平。内存高效:直接处理 bytes 而非 str,减少

核心优势

  1. 极高性能
    • 比标准库 json10~100 倍(尤其在大数据量时)。
    • 反序列化速度超过 ujson,序列化速度接近 rust/c 原生水平。
  2. 内存高效
    • 直接处理 bytes 而非 str,减少内存分配。
  3. 严格符合标准
    • 符合 rfc 8259 和 ecma-404 标准。
  4. 无 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 倍以上

使用场景推荐

  1. 高吞吐量服务:api 服务器、微服务。
  2. 大数据处理:快速解析大型 json 文件。
  3. 科学计算:无缝集成 numpy/pandas。
  4. 替代 json:追求极致性能的通用场景。

注意事项

  1. 输出类型
    • dumps() 返回 bytes(非字符串),需手动解码为 str
  2. 键排序
    • 默认不排序键,需用 option=orjson.opt_sort_keys
  3. 错误处理
    • 无效输入直接抛出 orjson.jsondecodeerror

总结

orjson 是 python 生态中性能最强的 json 库,适用于对速度要求严苛的场景。其特点包括:

  • 极速的序列化/反序列化
  • 原生支持日期、uuid、numpy 等类型
  • 内存高效且线程安全

到此这篇关于python json编码/解码库orjson的用法详解的文章就介绍到这了,更多相关python orjson库用法内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com