python-rapidjson:给 Python 塞进一台 C++ 引擎

Python 的 json 模块够用,但不够快。如果你的项目对 JSON 解析性能有要求,python-rapidjson 是一个值得关注的选择。

正文顶部截图

python-rapidjson 是 RapidJSON 的 Python 封装。RapidJSON 是腾讯开源的一个 C++ JSON 解析库,以性能著称。python-rapidjson 把它打包成 Python 扩展模块,让 Python 开发者能直接调用底层的 C++ 能力,在 JSON 序列化和反序列化上获得明显的速度提升。

项目在 GitHub 上收获了 532 个 Star,基于 MIT 协议开源。作者提供了完善的文档和 benchmarks,方便开发者评估性能差异。

README区域截图

安装方式

通过 pip 直接安装:

pip install python-rapidjson

也支持 Conda 环境:

conda install -c conda-forge python-rapidjson

基本用法

python-rapidjson 的 API 和标准库 json 模块类似,可以快速上手。序列化使用 dumps,反序列化使用 loads:

import rapidjson
data = {'foo': 100, 'bar': 'baz'}
rapidjson.dumps(data)
# 输出: '{"foo":100,"bar":"baz"}'

反序列化示例:

rapidjson.loads('{"bar":"baz","foo":100}')
# 输出: {'bar': 'baz', 'foo': 100}

支持流式写入,可控制每次写入的 chunk 大小:

class Stream:
    def write(self, data):
        print("Chunk:", data)

rapidjson.dump(data, Stream(), chunk_size=5)

JSONC 支持

python-rapidjson 的一个实用功能是对 JSONC 格式的支持。JSONC 是带注释和 trailing comma 的 JSON 变体。通过 Decoder 类和 parse_mode 参数可以开启:

from rapidjson import Decoder
from rapidjson import PM_COMMENTS, PM_TRAILING_COMMAS
decoder = Decoder(parse_mode=PM_COMMENTS | PM_TRAILING_COMMAS)
decoder('''
{
    "bar": /* 注释 */ "baz",
    "foo":100, // 尾逗号和注释
}
''')
# 输出: {'bar': 'baz', 'foo': 100}

这个能力在处理非严格 JSON 格式的数据时很实用,比如一些配置文件或遗留系统输出的 JSON。

设计取舍

python-rapidjson 在 API 设计上追求性能而不是做标准库 json 的完全替代。它在某些细节上和标准库行为不一致,比如对默认参数的处理、对特定数据类型的序列化方式等。官方文档中有专门的 incompatibilities 章节说明了这些差异。如果你需要标准库行为的完全兼容,需要用适配层做包装。

性能表现

python-rapidjson 的性能优势来自底层 RapidJSON 的高度优化。官方的 benchmarks 页面有和其他 JSON 库的具体对比数据。在大多数场景下,它的序列化和反序列化速度都显著快于标准库 json。

如果需要从源码构建,需要在克隆仓库时带上子模块:

git clone --recursive <repo_url>

或者设置 RapidJSON 头文件路径后编译:

python3 setup.py build --rj-include-dir=/usr/include/rapidjson

python-rapidjson 适合那些对 JSON 处理性能有要求的 Python 项目,尤其是需要高频序列化反序列化的场景。它的 API 简洁,学习成本低,切换到它的成本不高。如果你的项目中 JSON 处理是瓶颈,可以试一试这个库。

ON 处理性能有要求的 Python 项目,尤其是需要高频序列化反序列化的场景。它的 API 简洁,学习成本低,切换到它的成本不高。如果你的项目中 JSON 处理是瓶颈,可以试一试这个库。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐