orjson:一个比标准库快 10 倍的 Python JSON 库
文章目录orjson一个比标准库快 10 倍的 Python JSON 库1、标准库的短板2、orjson 快在哪里3、安装与使用4、平台支持5、适合哪些人orjson一个比标准库快 10 倍的 Python JSON 库orjson 在 GitHub 上已有 8,097 个 Star。这是一个用 Rust 编写的 Python JSON 库目标很明确比标准库更快、更正确地处理 JSON。1、标准库的短板Python 内置的json模块足够应付日常但一旦数据量上去、类型复杂起来瓶颈就出来了。标准库不原生支持datetime、UUID、numpy.ndarray这类常见类型碰到就得手动写转换逻辑。序列化大对象时速度也往往拖后腿。2、orjson 快在哪里orjson 的dumps()序列化速度约为标准库的 10 倍loads()解析速度约为 2 倍。它严格遵循 UTF-8 和 RFC 8259不会为了追求速度牺牲正确性。这些类型它原生支持序列化dataclasses.dataclassdatetime.datetime、datetime.date、datetime.timeuuid.UUIDnumpy.ndarrayenum.Enum不需要手写转换函数直接丢进去就行。输出是 UTF-8 编码的bytes对象。序列化过程中 GIL 被全程持有对纯 Python 调用者来说是透明的。3、安装与使用通过 PyPI 安装pipinstallorjson 3.10,4也可以在pyproject.toml里指定orjson ^3.10快速示例importorjson,datetime,numpy data{type:job,created_at:datetime.datetime(1970,1,1),payload:numpy.array([[1,2],[3,4]]),}orjson.dumps(data,optionorjson.OPT_NAIVE_UTC|orjson.OPT_SERIALIZE_NUMPY)# b{type:job,created_at:1970-01-01T00:00:0000:00,payload:[[1,2],[3,4]]}注意orjson.dumps()返回的是bytes不是str。dict的键如果不是字符串需要加optionorjson.OPT_NON_STR_KEYS。缩进通过OPT_INDENT_2控制标准库的indent参数在这里被替换为选项位。4、平台支持orjson 支持 CPython 3.10 到 3.15提供 Linux、macOS、Windows 的预编译 wheel覆盖 amd64、aarch64、arm7、ppc64le、s390x 等架构。amd64 版本在运行时会自动检测 AVX-512 指令集来提速。它不支持 PyPy 和 Android、iOS 的嵌入式 Python。5、适合哪些人需要处理大量 JSON 数据的后端服务开发者使用dataclass、numpy、datetime较多的数据工程场景对序列化性能有明确要求的项目如果你现在的 JSON 处理已经成为性能瓶颈替换为 orjson 通常是最快的优化路径。较多的数据工程场景对序列化性能有明确要求的项目如果你现在的 JSON 处理已经成为性能瓶颈替换为 orjson 通常是最快的优化路径。