跳转到主要内容

Python的超快JSON编码和解码器

项目描述

UltraJSON

PyPI version Supported Python versions PyPI downloads GitHub Actions status codecov DOI Code style: Black

UltraJSON是一个纯C编写的超快JSON编码和解码器,适用于Python 3.8+。

使用pip安装

python -m pip install ujson

项目状态

[!警告] UltraJSON 的架构在修改时根本不适合,因为这样可能会引入新的安全漏洞。因此,这个库已被置于仅维护模式。将添加对新的Python版本的支持,并修复关键错误和安全问题,但将拒绝所有其他更改。鼓励用户迁移到orjson,它既更快,将来出现意外缓冲区溢出漏洞的可能性也较小。

用法

可以作为Python中大多数其他JSON解析器的直接替换

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

编码器选项

encode_html_chars

用于启用对“不安全”HTML字符的特殊编码,将其转换为更安全的Unicode序列。默认值为False

>>> ujson.dumps("<script>John&Doe", encode_html_chars=True)
'"\\u003cscript\\u003eJohn\\u0026Doe"'

ensure_ascii

将输出限制为ASCII,并将所有大于127的扩展字符进行转义。默认值为True。如果你的最终格式支持UTF-8,建议将该选项设置为false以节省空间

>>> ujson.dumps("åäö")
'"\\u00e5\\u00e4\\u00f6"'
>>> ujson.dumps("åäö", ensure_ascii=False)
'"åäö"'

escape_forward_slashes

控制是否转义正斜杠(/)。默认值为True

>>> ujson.dumps("https://example.com")
'"https:\\/\\/example.com"'
>>> ujson.dumps("https://example.com", escape_forward_slashes=False)
'"https://example.com"'

indent

控制是否启用缩进(“美观输出”)。默认值为0(禁用)

>>> ujson.dumps({"foo": "bar"})
'{"foo":"bar"}'
>>> print(ujson.dumps({"foo": "bar"}, indent=4))
{
    "foo":"bar"
}

基准测试

UltraJSON 每秒调用次数与其他流行的JSON解析器相比,性能提升见下文。

测试机器

Linux 5.15.0-1037-azure x86_64 #44-Ubuntu SMP Thu Apr 20 13:19:31 UTC 2023

版本

  • CPython 3.11.3(主要,2023年4月6日,07:55:46)[GCC 11.3.0]
  • ujson : 5.7.1.dev26
  • orjson : 3.9.0
  • simplejson : 3.19.1
  • json : 2.0.9
ujson orjson simplejson json
包含256个双精度浮点数的数组
编码 18,282 79,569 5,681 5,935
解码 28,765 93,283 13,844 13,367
包含256个UTF-8字符串的数组
编码 3,457 26,437 3,630 3,653
解码 3,576 4,236 522 1,978
包含256个字符串的数组
编码 44,769 125,920 21,401 23,565
解码 28,518 75,043 41,496 42,221
中等复杂对象
编码 11,672 47,659 3,913 5,729
解码 12,522 23,599 8,007 9,720
包含256个True值的数组
编码 110,444 425,919 81,428 84,347
解码 203,430 318,193 146,867 156,249
包含256个{string, int}对的字典
编码 14,170 72,514 3,050 7,079
解码 19,116 27,542 9,374 13,713
包含256个包含256个{string, int}对的数组的字典
编码 55 282 11 26
解码 48 53 27 34
包含256个包含256个{string, int}对的数组的字典,输出排序键
编码 42 8 27
复杂对象
编码 462 397 444
解码 480 618 177 310

以上指标以每秒调用次数计算,数值越大越好。

构建选项

对于有特定需求的用户,如Linux发行版打包者,提供了一些以环境变量形式存在的构建选项。

调试符号

UJSON_BUILD_NO_STRIP

默认情况下,Linux平台上会移除调试符号。将此环境变量设置为1True将禁用此行为。

使用外部或系统版本的 double-conversion 库

这两个环境变量通常一起使用,例如

export UJSON_BUILD_DC_INCLUDES='/usr/include/double-conversion'
export UJSON_BUILD_DC_LIBS='-ldouble-conversion'

计划链接到外部共享库的用户应了解,在升级系统库或复制编译的轮到其他机器时,这引入了ABI兼容性要求。

UJSON_BUILD_DC_INCLUDES

一个或多个目录,由os.pathsep(与PATH环境变量相同)分隔,用于查找double-conversion头文件;默认情况下使用捆绑的副本。

UJSON_BUILD_DC_LIBS

链接到double-conversion库所需的编译器标志;默认情况下使用捆绑的副本。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

ujson-5.10.0.tar.gz (7.2 MB 查看散列值)

上传时间

构建分发

ujson-5.10.0-pp310-pypy310_pp73-win_amd64.whl (42.2 kB 查看散列值)

上传时间 PyPy Windows x86-64

ujson-5.10.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (48.5 kB 查看散列值)

上传时间 PyPy manylinux: glibc 2.17+ x86-64

ujson-5.10.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (47.3 kB 查看散列值)

上传时间 PyPy manylinux: glibc 2.17+ ARM64

ujson-5.10.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (54.3 kB 查看散列值)

上传时间 PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

ujson-5.10.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl (48.1 kB 查看散列值)

上传时间 PyPy macOS 11.0+ ARM64

ujson-5.10.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl (51.8 kB 查看散列值)

上传时间 PyPy macOS 10.9+ x86-64

ujson-5.10.0-pp39-pypy39_pp73-win_amd64.whl (42.2 kB 查看散列值)

上传时间 PyPy Windows x86-64

ujson-5.10.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (48.5 kB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.17+ x86-64

ujson-5.10.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (47.2 kB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.17+ ARM64

ujson-5.10.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (54.2 kB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

ujson-5.10.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl (48.1 kB 查看哈希值)

上传时间 PyPy macOS 11.0+ ARM64

ujson-5.10.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (51.9 kB 查看哈希值)

上传时间 PyPy macOS 10.9+ x86-64

ujson-5.10.0-pp38-pypy38_pp73-win_amd64.whl (42.3 kB 查看哈希值)

上传时间 PyPy Windows x86-64

ujson-5.10.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (48.5 kB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.17+ x86-64

ujson-5.10.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (54.3 kB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

ujson-5.10.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl (48.1 kB 查看哈希值)

上传时间 PyPy macOS 11.0+ ARM64

ujson-5.10.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (51.8 kB 查看哈希值)

上传时间 PyPy macOS 10.9+ x86-64

ujson-5.10.0-cp313-cp313-win_amd64.whl (42.2 kB 查看哈希值)

上传于 CPython 3.13 Windows x86-64

ujson-5.10.0-cp313-cp313-win32.whl (38.8 kB 查看哈希)

上传于 CPython 3.13 Windows x86

ujson-5.10.0-cp313-cp313-musllinux_1_2_x86_64.whl (1.0 MB 查看哈希)

上传于 CPython 3.13 musllinux: musl 1.2+ x86-64

ujson-5.10.0-cp313-cp313-musllinux_1_2_i686.whl (1.1 MB 查看哈希)

上传于 CPython 3.13 musllinux: musl 1.2+ i686

ujson-5.10.0-cp313-cp313-musllinux_1_2_aarch64.whl (997.9 kB 查看哈希)

上传于 CPython 3.13 musllinux: musl 1.2+ ARM64

ujson-5.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (53.7 kB 查看哈希)

上传于 CPython 3.13 manylinux: glibc 2.17+ x86-64

ujson-5.10.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (52.0 kB 查看哈希)

上传于 CPython 3.13 manylinux: glibc 2.17+ ARM64

ujson-5.10.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (58.6 kB 查看哈希)

上传于 CPython 3.13 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

ujson-5.10.0-cp313-cp313-macosx_11_0_arm64.whl (51.8 kB 查看哈希)

上传于 CPython 3.13 macOS 11.0+ ARM64

ujson-5.10.0-cp313-cp313-macosx_10_9_x86_64.whl (55.6 kB 查看哈希)

上传于 CPython 3.13 macOS 10.9+ x86-64

ujson-5.10.0-cp312-cp312-win_amd64.whl (42.2 kB 查看哈希)

上传于 CPython 3.12 Windows x86-64

ujson-5.10.0-cp312-cp312-win32.whl (38.8 kB 查看哈希)

上传于 CPython 3.12 Windows x86

ujson-5.10.0-cp312-cp312-musllinux_1_2_x86_64.whl (1.0 MB 查看哈希值)

上传于 CPython 3.12 musllinux: musl 1.2+ x86-64

ujson-5.10.0-cp312-cp312-musllinux_1_2_i686.whl (1.1 MB 查看哈希值)

上传于 CPython 3.12 musllinux: musl 1.2+ i686

ujson-5.10.0-cp312-cp312-musllinux_1_2_aarch64.whl (997.9 kB 查看哈希值)

上传于 CPython 3.12 musllinux: musl 1.2+ ARM64

ujson-5.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (53.7 kB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.17+ x86-64

ujson-5.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (52.0 kB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.17+ ARM64

ujson-5.10.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (58.6 kB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

ujson-5.10.0-cp312-cp312-macosx_11_0_arm64.whl (51.8 kB 查看哈希值)

上传于 CPython 3.12 macOS 11.0+ ARM64

ujson-5.10.0-cp312-cp312-macosx_10_9_x86_64.whl (55.6 kB 查看哈希值)

上传于 CPython 3.12 macOS 10.9+ x86-64

ujson-5.10.0-cp311-cp311-win_amd64.whl (42.1 kB 查看哈希值)

上传于 CPython 3.11 Windows x86-64

ujson-5.10.0-cp311-cp311-win32.whl (38.6 kB 查看哈希值)

上传于 CPython 3.11 Windows x86

ujson-5.10.0-cp311-cp311-musllinux_1_2_x86_64.whl (1.0 MB 查看哈希值)

上传于 CPython 3.11 musllinux: musl 1.2+ x86-64

ujson-5.10.0-cp311-cp311-musllinux_1_2_i686.whl (1.1 MB 查看哈希值)

上传于 CPython 3.11 musllinux: musl 1.2+ i686

ujson-5.10.0-cp311-cp311-musllinux_1_2_aarch64.whl (997.9 kB 查看哈希值)

上传于 CPython 3.11 musllinux: musl 1.2+ ARM64

ujson-5.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (53.6 kB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ x86-64

ujson-5.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (52.0 kB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ ARM64

ujson-5.10.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (58.5 kB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

ujson-5.10.0-cp311-cp311-macosx_11_0_arm64.whl (51.8 kB 查看哈希值)

上传于 CPython 3.11 macOS 11.0+ ARM64

ujson-5.10.0-cp311-cp311-macosx_10_9_x86_64.whl (55.4 kB 查看哈希值)

上传于 CPython 3.11 macOS 10.9+ x86-64

ujson-5.10.0-cp310-cp310-win_amd64.whl (42.1 kB 查看哈希值)

上传于 CPython 3.10 Windows x86-64

ujson-5.10.0-cp310-cp310-win32.whl (38.6 kB 查看哈希值)

上传于 CPython 3.10 Windows x86

ujson-5.10.0-cp310-cp310-musllinux_1_2_x86_64.whl (1.0 MB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.2+ x86-64

ujson-5.10.0-cp310-cp310-musllinux_1_2_i686.whl (1.1 MB 查看哈希值)

上传时间 CPython 3.10 musllinux: musl 1.2+ i686

ujson-5.10.0-cp310-cp310-musllinux_1_2_aarch64.whl (997.9 kB 查看哈希值)

上传时间 CPython 3.10 musllinux: musl 1.2+ ARM64

ujson-5.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (53.6 kB 查看哈希值)

上传时间 CPython 3.10 manylinux: glibc 2.17+ x86-64

ujson-5.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (52.0 kB 查看哈希值)

上传时间 CPython 3.10 manylinux: glibc 2.17+ ARM64

ujson-5.10.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (58.5 kB 查看哈希值)

上传时间 CPython 3.10 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

ujson-5.10.0-cp310-cp310-macosx_11_0_arm64.whl (51.8 kB 查看哈希值)

上传时间 CPython 3.10 macOS 11.0+ ARM64

ujson-5.10.0-cp310-cp310-macosx_10_9_x86_64.whl (55.4 kB 查看哈希值)

上传时间 CPython 3.10 macOS 10.9+ x86-64

ujson-5.10.0-cp39-cp39-win_amd64.whl (42.1 kB 查看哈希值)

上传时间 CPython 3.9 Windows x86-64

ujson-5.10.0-cp39-cp39-win32.whl (38.7 kB 查看哈希值)

上传时间 CPython 3.9 Windows x86

ujson-5.10.0-cp39-cp39-musllinux_1_2_x86_64.whl (1.0 MB 查看哈希值)

上传时间 CPython 3.9 musllinux: musl 1.2+ x86-64

ujson-5.10.0-cp39-cp39-musllinux_1_2_i686.whl (1.1 MB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.2+ i686

ujson-5.10.0-cp39-cp39-musllinux_1_2_aarch64.whl (998.0 kB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.2+ ARM64

ujson-5.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (53.6 kB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ x86-64

ujson-5.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (52.0 kB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ ARM64

ujson-5.10.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (58.6 kB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

ujson-5.10.0-cp39-cp39-macosx_11_0_arm64.whl (51.8 kB 查看哈希值)

上传于 CPython 3.9 macOS 11.0+ ARM64

ujson-5.10.0-cp39-cp39-macosx_10_9_x86_64.whl (55.4 kB 查看哈希值)

上传于 CPython 3.9 macOS 10.9+ x86-64

ujson-5.10.0-cp38-cp38-win_amd64.whl (42.1 kB 查看哈希值)

上传于 CPython 3.8 Windows x86-64

ujson-5.10.0-cp38-cp38-win32.whl (38.7 kB 查看哈希值)

上传于 CPython 3.8 Windows x86

ujson-5.10.0-cp38-cp38-musllinux_1_2_x86_64.whl (1.0 MB 查看哈希值)

上传于 CPython 3.8 musllinux: musl 1.2+ x86-64

ujson-5.10.0-cp38-cp38-musllinux_1_2_i686.whl (1.1 MB 查看哈希值)

上传于 CPython 3.8 musllinux: musl 1.2+ i686

ujson-5.10.0-cp38-cp38-musllinux_1_2_aarch64.whl (998.1 kB 查看哈希值)

上传时间: CPython 3.8 musllinux: musl 1.2+ ARM64

ujson-5.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (53.6 kB 查看哈希值)

上传时间: CPython 3.8 manylinux: glibc 2.17+ x86-64

ujson-5.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (52.0 kB 查看哈希值)

上传时间: CPython 3.8 manylinux: glibc 2.17+ ARM64

ujson-5.10.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (58.6 kB 查看哈希值)

上传时间: CPython 3.8 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

ujson-5.10.0-cp38-cp38-macosx_11_0_arm64.whl (51.9 kB 查看哈希值)

上传时间: CPython 3.8 macOS 11.0+ ARM64

ujson-5.10.0-cp38-cp38-macosx_10_9_x86_64.whl (55.5 kB 查看哈希值)

上传时间: CPython 3.8 macOS 10.9+ x86-64

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页