标准库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全平台
pip install orjson
💻 高频实战代码
1、基础序列化/反序列化(对比原生json)
import orjson# 业务嵌套数据,数据库查询结果通用格式data ={"user_id":10086,"name":"运营测试账号","create_time":"2026-08-07 15:30:00","order_list":[{"order_id":"OD20260807001","amount":99.9,"pay_status":1},{"order_id":"OD20260807002","amount":199.9,"pay_status":0}]}# 1. 紧凑二进制输出(接口传输推荐,体积最小)json_bytes = orjson.dumps(data)print(json_bytes)# 2. 格式化美化输出(调试查看,等同pprint排版效果)json_str = orjson.dumps(data, option=orjson.OPT_INDENT_2).decode("utf-8")print(json_str)# 3. 反序列化,转回字典parse_data = orjson.loads(json_bytes)
2、原生支持datetime/Decimal(无需手动转换,原生json必踩坑)
import orjsonfrom datetime import datetimefrom decimal importDecimal# 包含时间、金额小数的业务数据biz_data ={"create_dt": datetime.now(),"balance":Decimal("12580.66"),"uid": b"user_192168"}# 直接序列化,无需自定义default转换函数res = orjson.dumps(biz_data, option=orjson.OPT_INDENT_2 | orjson.OPT_SERIALIZE_DECIMAL2)print(res.decode("utf-8"))
3、大批量列表数据高性能转换(数据库批量查询场景)
import orjsonimport time# 模拟10万条数据库订单数据batch_data =[{"id": i,"price": i *10.5,"tag":["已结算","dev环境"]}for i in range(100000)]start = time.time()# 大批量数据快速序列化result = orjson.dumps(batch_data)end = time.time()print(f"10万条数据序列化耗时:{end - start:.4f}s")
4、自定义格式化配置,过滤/排序key
import orjsondata ={"z":1,"a":2,"b":3}# OPT_SORT_KEYS:字典key自动排序;OPT_INDENT_2:2空格缩进美化pretty_json = orjson.dumps(data, option=orjson.OPT_INDENT_2 | orjson.OPT_SORT_KEYS).decode()print(pretty_json)
5、配合pprint联合调试(内存数据双重美化)
from pprint import pprintimport orjsondata ={"info":{"order":[{"price":99.9,"time":"2026-08-07"}]}}# orjson转格式化字符串,再用pprint打印json_text = orjson.dumps(data, option=orjson.OPT_INDENT_4).decode()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原生字典/列表
⚠️ 日常踩坑提醒
dumps 默认返回 bytes二进制,打印/存文本文件需要 .decode("utf-8") 转字符串,和标准json库返回字符串有区别- 不支持序列化无法转换的自定义类,复杂对象需提前拆解为字典
- 追求极致性能时不要加
OPT_INDENT_2格式化参数,仅调试场景使用 - 不能直接写入文件对象,需先decode转字符串,或直接write二进制
字符串持久化写法(日志/文件存储)
import orjsondata ={"name":"测试数据"}# 美化字符串pretty_str = orjson.dumps(data, option=orjson.OPT_INDENT_2).decode("utf-8")# 写入文件with open("data.log","w", encoding="utf-8")as f: f.write(pretty_str)
✅ 总结
如果你日常写Python接口、数据解析、数据库批量处理、自动化测试脚本,原生标准json库直接替换成orjson! 速度碾压标准库、自带业务类型兼容、格式化输出开箱即用,大批量嵌套数据处理效率大幅提升,和pprint搭配调试可读性拉满,是数据开发、测试开发必备高性能工具库! 建议收藏,接口/数据库数据序列化直接复制即用!