Python模块之orjson详细功能介绍及示例

在 Python 中,`orjson` 和标准库的 `json` 模块都用于 JSON 数据的序列化和反序列化,但它们在性能、功能和使用方式上有显著差异。以下是它们的区别及 `orjson` 的使用示例:

主要区别

特性json (标准库)orjson (第三方库)
性能较慢(纯 Python 实现)极快(Rust 实现,优化了内存和速度)
支持的数据类型基本类型(需自定义处理复杂类型)自动支持 datetimeUUIDnumpy 数组等
输出类型dumps 返回 strdumps 返回 bytes(需用 decode() 转字符串)
选项和配置简单参数(如 indent, sort_keys丰富的选项(通过 option 参数组合启用)
依赖内置无需安装需要安装:pip install orjson

使用示例:orjson

1. 安装
pip install orjson
2. 基本序列化与反序列化
import orjson

data = {"name": "Alice", "age": 30, "skills": ["Python", "Rust"]}

# 序列化为 bytes
json_bytes = orjson.dumps(data)
print(json_bytes)  # b'{"name":"Alice","age":30,"skills":["Python","Rust"]}'

# 反序列化
decoded_data = orjson.loads(json_bytes)
print(decoded_data["name"])  # Alice
3. 处理复杂数据类型(如 datetime
import orjson
from datetime import datetime

data = {"event": "Meeting", "time": datetime.now()}

# 自动序列化 datetime 对象
json_bytes = orjson.dumps(data)
print(json_bytes.decode())  # {"event":"Meeting","time":"2023-10-25T14:30:00Z"}
4. 使用选项美化输出
import orjson

data = {"a": 1, "b": 2, "c": 3}

# 启用缩进和键排序
json_bytes = orjson.dumps(
    data,
    option=orjson.OPT_INDENT_2 | orjson.OPT_SORT_KEYS
)
print(json_bytes.decode())
# 输出:
# {
#   "a": 1,
#   "b": 2,
#   "c": 3
# }
5. 处理非 ASCII 字符
import orjson

data = {"message": "你好,世界!"}

# 默认直接序列化非 ASCII 字符(无需额外配置)
json_bytes = orjson.dumps(data)
print(json_bytes.decode())  # {"message":"你好,世界!"}

关键选项(option 参数)

  • OPT_INDENT_2: 缩进 2 空格(类似 json.dumps(indent=2)
  • OPT_SORT_KEYS: 按键排序输出
  • OPT_NAIVE_UTC: 将 datetime 对象视为 UTC 时间
  • OPT_SERIALIZE_NUMPY: 支持 numpy 数组序列化
  • 多个选项可通过 | 组合使用。

适用场景

  • 高性能需求:如 API 服务器、大数据处理。
  • 复杂数据类型:无需手动处理 datetimeUUID
  • 二进制友好场景orjson.dumps 直接返回 bytes,适合网络传输。

注意事项

  • orjson.dumps 返回 bytes 而非 str,写入文件时需用二进制模式:
    with open("data.json", "wb") as f:
        f.write(orjson.dumps(data))
    
  • 不支持所有 Python 对象(如自定义类),需通过 default 参数处理:
    class User:
        def __init__(self, name):
            self.name = name
    
    user = User("Bob")
    json_bytes = orjson.dumps(user, default=lambda obj: obj.__dict__)
    

总结:orjson 是追求性能和便捷性时的最佳选择,而 json 模块适合简单场景或无需安装第三方库的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值