当前位置:首页>python>Python 处理JSON/接口高性能序列化神器:orjson

Python 处理JSON/接口高性能序列化神器:orjson

  • 2026-10-11 06:21:21
Python 处理JSON/接口高性能序列化神器:orjson
写Python接口、数据入库、接口联调最烦什么?
标准库json序列化慢、输出无优化、大列表/多层字典转换卡顿,数据库批量结果、百万级列表、复杂嵌套JSON转字符串时耗时严重,原生json还不支持datetime、bytes、decimal等常用类型,每次都要手动写转换逻辑,大批量数据处理直接拖慢脚本速度!
今天给大家推荐Python业界性能天花板序列化库:orjson
一行代码替代原生json,速度碾压标准库,原生支持各类业务常用类型,输出紧凑/格式化两种模式,大数据处理、接口返回、数据库批量转JSON必备。
orjson是第三方高性能JSON序列化/反序列化库,C语言底层实现,专门解决标准json库性能差、类型兼容差、格式化繁琐的痛点,是数据工程、测试开发、接口服务、大数据脚本标配工具。

核心优势

  • ✅ 性能拉满:序列化/反序列化速度是标准json的3~10倍,百万级数据无压力
  • ✅ 原生兼容业务类型:datetime、date、bytes、Decimal、UUID、numpy数值无需自定义转换器
  • ✅ 两种输出模式:紧凑二进制(接口传输)/格式化字符串(调试打印)
  • ✅ 低内存占用,大批量列表/嵌套字典不内存溢出
  • ✅ 严格遵循JSON标准,支持自定义忽略字段、排序key、浮点数精度控制
  • ✅ 兼容pformat输出风格,可配合pprint做调试可视化

适用场景

  • 接口服务:HTTP请求返回JSON、接口入参解析
  • 数据工程:DuckDB/MySQL批量查询结果转JSON、日志持久化
  • 自动化测试:接口返回体解析、测试用例数据序列化存储
  • 大数据处理:海量列表、多层嵌套业务数据转换
  • 本地缓存:结构化数据落地文件、内存数据流转

⚙️ 安装方式

pip一键安装,支持Windows/Mac/Linux全平台

  1. pip install orjson

💻 高频实战代码

1、基础序列化/反序列化(对比原生json)

  1. import orjson
  2. # 业务嵌套数据,数据库查询结果通用格式
  3. data ={
  4. "user_id":10086,
  5. "name":"运营测试账号",
  6. "create_time":"2026-08-07 15:30:00",
  7. "order_list":[
  8. {"order_id":"OD20260807001","amount":99.9,"pay_status":1},
  9. {"order_id":"OD20260807002","amount":199.9,"pay_status":0}
  10. ]
  11. }
  12. # 1. 紧凑二进制输出(接口传输推荐,体积最小)
  13. json_bytes = orjson.dumps(data)
  14. print(json_bytes)
  15. # 2. 格式化美化输出(调试查看,等同pprint排版效果)
  16. json_str = orjson.dumps(data, option=orjson.OPT_INDENT_2).decode("utf-8")
  17. print(json_str)
  18. # 3. 反序列化,转回字典
  19. parse_data = orjson.loads(json_bytes)

2、原生支持datetime/Decimal(无需手动转换,原生json必踩坑)

  1. import orjson
  2. from datetime import datetime
  3. from decimal importDecimal
  4. # 包含时间、金额小数的业务数据
  5. biz_data ={
  6. "create_dt": datetime.now(),
  7. "balance":Decimal("12580.66"),
  8. "uid": b"user_192168"
  9. }
  10. # 直接序列化,无需自定义default转换函数
  11. res = orjson.dumps(biz_data, option=orjson.OPT_INDENT_2 | orjson.OPT_SERIALIZE_DECIMAL2)
  12. print(res.decode("utf-8"))

3、大批量列表数据高性能转换(数据库批量查询场景)

  1. import orjson
  2. import time
  3. # 模拟10万条数据库订单数据
  4. batch_data =[{"id": i,"price": i *10.5,"tag":["已结算","dev环境"]}for i in range(100000)]
  5. start = time.time()
  6. # 大批量数据快速序列化
  7. result = orjson.dumps(batch_data)
  8. end = time.time()
  9. print(f"10万条数据序列化耗时:{end - start:.4f}s")

4、自定义格式化配置,过滤/排序key

  1. import orjson
  2. data ={"z":1,"a":2,"b":3}
  3. # OPT_SORT_KEYS:字典key自动排序;OPT_INDENT_2:2空格缩进美化
  4. pretty_json = orjson.dumps(data, option=orjson.OPT_INDENT_2 | orjson.OPT_SORT_KEYS).decode()
  5. print(pretty_json)

5、配合pprint联合调试(内存数据双重美化)

  1. from pprint import pprint
  2. import orjson
  3. data ={"info":{"order":[{"price":99.9,"time":"2026-08-07"}]}}
  4. # orjson转格式化字符串,再用pprint打印
  5. json_text = orjson.dumps(data, option=orjson.OPT_INDENT_4).decode()
  6. pprint(json_text)

📌 核心方法&参数简单说明

  • orjson.dumps(obj,option=0):对象序列化为bytes二进制
  • option=orjson.OPT_INDENT_2:开启2空格格式化缩进(调试专用)
  • option=orjson.OPT_SERIALIZE_DATETIME:自动序列化datetime时间
  • option=orjson.OPT_SERIALIZE_DECIMAL2:高精度序列化Decimal金额
  • option=orjson.OPT_SORT_KEYS:字典key自动升序排列
  • orjson.loads(bytes/str):JSON字符串/二进制反序列化为Python原生字典/列表

⚠️ 日常踩坑提醒

  1. dumps 默认返回 bytes二进制,打印/存文本文件需要 .decode("utf-8") 转字符串,和标准json库返回字符串有区别
  2. 不支持序列化无法转换的自定义类,复杂对象需提前拆解为字典
  3. 追求极致性能时不要加 OPT_INDENT_2格式化参数,仅调试场景使用
  4. 不能直接写入文件对象,需先decode转字符串,或直接write二进制

字符串持久化写法(日志/文件存储)

  1. import orjson
  2. data ={"name":"测试数据"}
  3. # 美化字符串
  4. pretty_str = orjson.dumps(data, option=orjson.OPT_INDENT_2).decode("utf-8")
  5. # 写入文件
  6. with open("data.log","w", encoding="utf-8")as f:
  7.     f.write(pretty_str)

✅ 总结

如果你日常写Python接口、数据解析、数据库批量处理、自动化测试脚本,原生标准json库直接替换成orjson! 速度碾压标准库、自带业务类型兼容、格式化输出开箱即用,大批量嵌套数据处理效率大幅提升,和pprint搭配调试可读性拉满,是数据开发、测试开发必备高性能工具库! 建议收藏,接口/数据库数据序列化直接复制即用!

最新文章

随机文章