0

0

Python 或json vs orjson 的基准测试

舞姬之光

舞姬之光

发布时间:2026-02-15 17:57:09

|

855人浏览过

|

来源于php中文网

原创

orjson在多数实际场景下序列化比json快2–5倍、反序列化快1.5–3倍,但性能差距高度依赖数据结构,纯字符串或小字典差异甚微,而含大量float、嵌套list或datetime的数据才显著拉开距离。

python 或json vs orjson 的基准测试

orjson 比 json 快多少?别信宣传页,看真实场景

在多数实际场景下,orjson 序列化比标准 json 快 2–5 倍,反序列化快 1.5–3 倍;但这个差距高度依赖数据结构——纯字符串或小字典几乎没差别,而含大量 float、嵌套 listdatetime 的 payload 才明显拉开距离。

  • 测试时务必用你的真实数据样本,比如从数据库查出的 10k 条记录 dump 出来的 dict list,而不是 {'a': 1, 'b': [1,2,3]} 这种玩具数据
  • orjson 不支持 default 回调函数,遇到自定义类型(如 dataclassUUID)会直接抛 TypeError: Type is not JSON serializable
  • 它默认输出 bytes 而非 str,如果后续要拼接 URL 或写日志,得显式调用 .decode(),否则容易踩 TypeError: expected str, bytes found

怎么安全替换项目里的 json.loads / json.dumps?

不能全局搜索替换,因为 orjson 的行为和接口有关键差异,硬切会导致运行时错误或静默数据丢失。

  • orjson.loads() 不接受 object_hookparse_float 等参数,如果你靠 object_hook 把 JSON 字段转成 Decimal,就得改用预处理或后解析方式
  • orjson.dumps() 默认不带缩进、不排序 key、不处理 NaN/Infinity(会报错),而 json.dumps(indent=2, sort_keys=True) 这类调试友好配置它根本不支持
  • 它强制要求输入是 UTF-8 兼容对象,传入 bytes 会报 TypeError: expected str, bytes found;反过来,orjson.loads() 只接受 bytesbytearray,传 str 会直接崩溃

orjson 在 FastAPI / Uvicorn 里要不要手动启用?

FastAPI 从 v0.95.0 起已默认用 orjson 替代 json 做响应序列化,但仅限于 return dict/list 的路径;如果你手动调用 json.dumps() 构造响应体,或用了 Response(content=...),那还是走标准库。

Dream Machine
Dream Machine

Dream Machine 是由 Luma AI 开发的一款 AI 视频生成工具,可以快速将文本和图像转换为高质量的视频内容。

下载
  • 检查是否生效:启动服务后访问一个返回 JSON 的接口,用 curl -v 看响应头里有没有 content-type: application/json,再对比响应体里浮点数是不是没尾随零(orjson 默认省略)、None 是不是变成 null(它严格遵循 JSON 规范)
  • 禁用方法是设 app = FastAPI(json_loads=json.loads, json_dumps=json.dumps),但除非你依赖 default 回调,否则没必要退回去
  • Uvicorn 本身不干预 JSON 处理,它只管把 ASGI app 返回的 bytes 发出去,所以“启用 orjson”这事跟 Uvicorn 配置无关

基准测试时最容易漏掉的三个条件

很多人的 benchmark 结果不可复现,问题出在没锁死环境变量和底层行为。

立即学习Python免费学习笔记(深入)”;

  • 必须设置 ORJSON_OPTIONS = orjson.OPT_STRICT_INTEGER(如果数据里有大整数),否则 orjson 可能悄悄把超过 2**53 的 int 转成 float,导致精度丢失——这在金融或 ID 场景里是致命 bug
  • 测试前加 import gc; gc.collect(),否则内存缓存会让第二次以后的 orjson.dumps() 显著变快,扭曲真实 IO-bound 场景
  • timeit 时避免把 import 写进 setup 字符串,应提前 import,否则每次循环都重载模块,测的其实是导入开销而非序列化本身

真正卡顿的地方往往不在序列化本身,而在你把 orjson.dumps() 的结果又喂给 gzip.compress() 或塞进 asyncpgexecute()——这些环节的瓶颈会掩盖 JSON 库差异。先确认 profile 里 json 确实是热点,再动它。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

441

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

544

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

321

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API

Python FastAPI 异步开发利用 async/await 关键字,通过定义异步视图函数、使用异步数据库库 (如 databases)、异步 HTTP 客户端 (如 httpx),并结合后台任务队列(如 Celery)和异步依赖项,实现高效的 I/O 密集型 API,显著提升吞吐量和响应速度,尤其适用于处理数据库查询、网络请求等耗时操作,无需阻塞主线程。

27

2025.12.22

Python 微服务架构与 FastAPI 框架
Python 微服务架构与 FastAPI 框架

本专题系统讲解 Python 微服务架构设计与 FastAPI 框架应用,涵盖 FastAPI 的快速开发、路由与依赖注入、数据模型验证、API 文档自动生成、OAuth2 与 JWT 身份验证、异步支持、部署与扩展等。通过实际案例,帮助学习者掌握 使用 FastAPI 构建高效、可扩展的微服务应用,提高服务响应速度与系统可维护性。

198

2026.02.06

css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

589

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

105

2025.10.23

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

139

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 4.3万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号