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

 更新时间:2025年07月08日 10:34:47   作者:老胖闲聊  
orjson是一个高性能的JSON编码/解码库,专为Python设计,使用Rust实现,相比标准库的json模块和其他第三方库(如 ujson、simplejson),orjson在速度上有显著优势,同时支持更丰富的原生数据类型,本文通过代码示例给大家介绍的非常详细,需要的朋友可以参考下

核心优势

  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库用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python shapely.geometry.polygon任意两个四边形的IOU计算实例

    python shapely.geometry.polygon任意两个四边形的IOU计算实例

    这篇文章主要介绍了python shapely.geometry.polygon任意两个四边形的IOU计算实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Selenium定位元素的方法小结及语法详解

    Selenium定位元素的方法小结及语法详解

    Selenium是一种用于自动化网页操作的工具,通过不同定位策略可以精准定位网页元素,本文介绍了8种定位方法,并详细说明了每种方法的语法、使用场景及实际操作中的注意事项,需要的朋友可以参考下
    2025-02-02
  • 利用Python统计Jira数据并可视化

    利用Python统计Jira数据并可视化

    目前公司使用 Jira 作为项目管理工具,在每一次迭代完成后的复盘会上,我们都需要针对本次迭代的 Bug 进行数据统计,以帮助管理层能更直观的了解研发的代码质量。本篇文章将介绍如何利用统计 Jira 数据,并进行可视化,需要的可以参考一下
    2022-07-07
  • 详解Python Pyside6如何准确嵌入可视化数据图表

    详解Python Pyside6如何准确嵌入可视化数据图表

    Pyside6是一款基于Qt框架的Python GUI开发库。它提供了丰富的UI组件和功能,支持多种操作系统。本文主要介绍了Pyside6嵌入可视化数据图表的方法,需要的可以参考一下
    2023-05-05
  • Python 常用string函数详解

    Python 常用string函数详解

    下面小编就为大家带来一篇Python 常用string函数详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • Tensorflow卷积神经网络实例进阶

    Tensorflow卷积神经网络实例进阶

    这篇文章主要为大家详细介绍了Tensorflow卷积神经网络实例进阶,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • 使用Python3内置文档高效学习以及官方中文文档

    使用Python3内置文档高效学习以及官方中文文档

    这篇文章主要给大家介绍了关于使用Python3内置文档高效学习以及官方中文文档的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Python3具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • pandas 对每一列数据进行标准化的方法

    pandas 对每一列数据进行标准化的方法

    今天小编就为大家分享一篇pandas 对每一列数据进行标准化的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python使用Gzip解压的示例详解

    Python使用Gzip解压的示例详解

    Python 中构建了许多用于压缩和解压缩目的的库,本文为大家介绍的Gzip库就是一种流行的数据压缩工具,下面我们就来看看如何使用 gzip 解压缩来解压缩压缩内容吧
    2023-11-11
  • python爬虫使用正则爬取网站的实现

    python爬虫使用正则爬取网站的实现

    这篇文章主要介绍了python爬虫使用正则爬取网站的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08

最新评论