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 的项目,迁移成本很低。

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 库等。
浙公网安备 33010602011771号