ujson:C 语言写的高性能 Python JSON 解析器

ujson:C 语言写的高性能 Python JSON 解析器

ultrajson 在 GitHub 上有 4,487 个 Star。这是一个用纯 C 语言编写的 JSON 编码和解码库,给 Python 提供了绑定接口。如果你处理的 JSON 数据量比较大,对序列化性能敏感,它曾经是个值得关注的选项。

正文顶部截图

1、这项目干嘛的

ujson 的定位很直接:做一个比 Python 标准库 json 更快的替代品。安装后直接 import ujson 就能用,dumps 和 loads 的接口和标准库基本一致。

import ujson
ujson.dumps([{"key": "value"}, 81, True])
ujson.loads("""[{"key": "value"}, 81, true]""")

不需要改业务逻辑,换一行 import 就能跑。对于已经在大量用标准库 json 的项目,迁移成本很低。

README区域截图

2、几个实用选项

ujson 提供了一些编码时的控制参数,覆盖了常见需求:

encode_html_chars:把 HTML 里的危险字符转成 Unicode 转义序列,比如 < 变成 <。默认关闭,需要输出到前端时可以考虑开启。

ensure_ascii:限制输出为 ASCII,超出 127 的字符全部转义。默认开启。如果你的系统支持 UTF-8,关掉这个能省不少字节。

escape_forward_slashes:控制是否转义正斜杠。默认开启,处理 URL 时可能想关掉。

indent:控制是否输出带缩进的格式化 JSON。默认 0,即不缩进。

3、性能数据

项目里附了和 orjson、simplejson、标准库 json 的基准测试。测试环境是 Linux 5.15 + CPython 3.11。

几个典型场景每秒调用数:

场景 ujson orjson 标准库 json
256 个双精度数组 encode 18,282 79,569 5,935
256 个字符串数组 encode 44,769 125,920 23,565
中等复杂度对象 encode 11,672 47,659 5,729

ujson 比标准库 json 快几倍,但在大多数场景下被 orjson 拉开明显差距。数据量越大,这个差距越明显。

4、项目现状

需要特别留意的是,这个项目目前进入了仅维护模式。官方 README 里写得清楚:架构本身不适合继续迭代,改动容易引入新的安全问题。后续只支持新 Python 版本,修关键 bug 和安全漏洞,不再接受其他改动。

官方建议新项目直接迁移到 orjson,速度和安全性都更好。如果你在评估选型,这个信息很关键。

已经在用 ujson 的项目短期内可以继续用,但长远来看,orjson 是更稳妥的方向。

5、安装和线程安全

pip 直接装:

python -m pip install ujson

不需要额外编译依赖,装完就能用。ujson 内部没有全局状态,多线程调用是安全的,在 Python 自由线程模式下也能保持一致结果。当然,同时修改一个对象再序列化它,这种行为本身还是危险的。

对于有特殊打包需求的场景,项目还提供了几个环境变量来控制构建行为,比如关闭符号剥离、使用系统自带的 double-conversion 库等。

posted @ 2026-06-11 15:22  小飞技术快餐  阅读(4)  评论(0)    收藏  举报