开发者

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

目录
  • 核心优势
  • 安装
  • 基本用法
    • 1. 序列化(python 对象 → jsON)
    • 2. 反序列化(JSON → Python 对象)
  • 高级特性
    • 1. 处理复杂数据类型
    • 2. 自定义选项
    • 3. 处理非 UTF-8 数据
  • 性能对比示例
    • 使用场景推荐
      • 注意事项
        • 总结

          核心优势

          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_byteseWyjWNv = orjson.dumps(
              data,
              option=orjson.OPT_NAIVE_UTC |   # 将无时区 datetime 视为 UTC
                     or编程客栈json.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.JSONDeeWyjWNvc编程客栈odeError

          总结

          orjson 是 Python 生态中性能最强的 JSON 库,适用于对速度要求严苛的场景。其特点包括:编程客栈

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

          到此这篇关于Python JSON编码/解码库orjson的用法详解的文章就介绍到这了,更多相关Python orjson库用法内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

          0

          上一篇:

          下一篇:

          精彩评论

          暂无评论...
          验证码 换一张
          取 消

          最新开发

          开发排行榜