ujson 5.11.0


pip install ujson

  Latest version

Released: Aug 20, 2025

Project Links

Meta
Author: Jonas Tarnstrom
Requires Python: >=3.9

Classifiers

Development Status
  • 5 - Production/Stable

Intended Audience
  • Developers

Programming Language
  • C
  • Python :: 3
  • Python :: 3 :: Only
  • Python :: 3.9
  • Python :: 3.10
  • Python :: 3.11
  • Python :: 3.12
  • Python :: 3.13
  • Python :: 3.14

Typing
  • Typed

UltraJSON

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

UltraJSON is an ultra fast JSON encoder and decoder written in pure C with bindings for Python 3.9+.

Install with pip:

python -m pip install ujson

Project status

[!WARNING] UltraJSON's architecture is fundamentally ill-suited to making changes without risk of introducing new security vulnerabilities. As a result, this library has been put into a maintenance-only mode. Support for new Python versions will be added and critical bugs and security issues will still be fixed but all other changes will be rejected. Users are encouraged to migrate to orjson which is both much faster and less likely to introduce a surprise buffer overflow vulnerability in the future.

Usage

May be used as a drop in replacement for most other JSON parsers for Python:

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

Encoder options

encode_html_chars

Used to enable special encoding of "unsafe" HTML characters into safer Unicode sequences. Default is False:

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

ensure_ascii

Limits output to ASCII and escapes all extended characters above 127. Default is True. If your end format supports UTF-8, setting this option to false is highly recommended to save space:

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

escape_forward_slashes

Controls whether forward slashes (/) are escaped. Default is True:

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

indent

Controls whether indentation ("pretty output") is enabled. Default is 0 (disabled):

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

Benchmarks

UltraJSON calls/sec compared to other popular JSON parsers with performance gain specified below each.

Test machine

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

Versions

  • CPython 3.11.3 (main, Apr 6 2023, 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
Array with 256 doubles
encode 18,282 79,569 5,681 5,935
decode 28,765 93,283 13,844 13,367
Array with 256 UTF-8 strings
encode 3,457 26,437 3,630 3,653
decode 3,576 4,236 522 1,978
Array with 256 strings
encode 44,769 125,920 21,401 23,565
decode 28,518 75,043 41,496 42,221
Medium complex object
encode 11,672 47,659 3,913 5,729
decode 12,522 23,599 8,007 9,720
Array with 256 True values
encode 110,444 425,919 81,428 84,347
decode 203,430 318,193 146,867 156,249
Array with 256 dict{string, int} pairs
encode 14,170 72,514 3,050 7,079
decode 19,116 27,542 9,374 13,713
Dict with 256 arrays with 256 dict{string, int} pairs
encode 55 282 11 26
decode 48 53 27 34
Dict with 256 arrays with 256 dict{string, int} pairs, outputting sorted keys
encode 42 8 27
Complex object
encode 462 397 444
decode 480 618 177 310

Above metrics are in call/sec, larger is better.

Build options

For those with particular needs, such as Linux distribution packagers, several build options are provided in the form of environment variables.

Debugging symbols

UJSON_BUILD_NO_STRIP

By default, debugging symbols are stripped on Linux platforms. Setting this environment variable with a value of 1 or True disables this behavior.

Using an external or system copy of the double-conversion library

These two environment variables are typically used together, something like:

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

Users planning to link against an external shared library should be aware of the ABI-compatibility requirements this introduces when upgrading system libraries or copying compiled wheels to other machines.

UJSON_BUILD_DC_INCLUDES

One or more directories, delimited by os.pathsep (same as the PATH environment variable), in which to look for double-conversion header files; the default is to use the bundled copy.

UJSON_BUILD_DC_LIBS

Compiler flags needed to link the double-conversion library; the default is to use the bundled copy.

Wheel compatibility matrix

Platform CPython 3.9 CPython 3.10 CPython 3.11 CPython 3.12 CPython 3.13 CPython 3.14 CPython (additional flags: t) 3.14 PyPy 3.11 (pp73)
macosx_10_13_x86_64
macosx_10_15_x86_64
macosx_10_9_x86_64
macosx_11_0_arm64
manylinux_2_24_aarch64
manylinux_2_24_i686
manylinux_2_24_x86_64
manylinux_2_28_aarch64
manylinux_2_28_i686
manylinux_2_28_x86_64
musllinux_1_2_aarch64
musllinux_1_2_i686
musllinux_1_2_x86_64
win32
win_amd64
win_arm64

Files in release

ujson-5.11.0-cp310-cp310-macosx_10_9_x86_64.whl (54.0KiB)
ujson-5.11.0-cp310-cp310-macosx_11_0_arm64.whl (51.9KiB)
ujson-5.11.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (56.3KiB)
ujson-5.11.0-cp310-cp310-manylinux_2_24_i686.manylinux_2_28_i686.whl (58.4KiB)
ujson-5.11.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (56.0KiB)
ujson-5.11.0-cp310-cp310-musllinux_1_2_aarch64.whl (1012.1KiB)
ujson-5.11.0-cp310-cp310-musllinux_1_2_i686.whl (1.1MiB)
ujson-5.11.0-cp310-cp310-musllinux_1_2_x86_64.whl (1.0MiB)
ujson-5.11.0-cp310-cp310-win32.whl (38.7KiB)
ujson-5.11.0-cp310-cp310-win_amd64.whl (42.7KiB)
ujson-5.11.0-cp310-cp310-win_arm64.whl (37.5KiB)
ujson-5.11.0-cp311-cp311-macosx_10_9_x86_64.whl (54.0KiB)
ujson-5.11.0-cp311-cp311-macosx_11_0_arm64.whl (51.9KiB)
ujson-5.11.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (56.3KiB)
ujson-5.11.0-cp311-cp311-manylinux_2_24_i686.manylinux_2_28_i686.whl (58.4KiB)
ujson-5.11.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (55.9KiB)
ujson-5.11.0-cp311-cp311-musllinux_1_2_aarch64.whl (1012.1KiB)
ujson-5.11.0-cp311-cp311-musllinux_1_2_i686.whl (1.1MiB)
ujson-5.11.0-cp311-cp311-musllinux_1_2_x86_64.whl (1.0MiB)
ujson-5.11.0-cp311-cp311-win32.whl (38.7KiB)
ujson-5.11.0-cp311-cp311-win_amd64.whl (42.7KiB)
ujson-5.11.0-cp311-cp311-win_arm64.whl (37.5KiB)
ujson-5.11.0-cp312-cp312-macosx_10_13_x86_64.whl (54.1KiB)
ujson-5.11.0-cp312-cp312-macosx_11_0_arm64.whl (51.9KiB)
ujson-5.11.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (56.2KiB)
ujson-5.11.0-cp312-cp312-manylinux_2_24_i686.manylinux_2_28_i686.whl (58.4KiB)
ujson-5.11.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (56.0KiB)
ujson-5.11.0-cp312-cp312-musllinux_1_2_aarch64.whl (1012.0KiB)
ujson-5.11.0-cp312-cp312-musllinux_1_2_i686.whl (1.1MiB)
ujson-5.11.0-cp312-cp312-musllinux_1_2_x86_64.whl (1.0MiB)
ujson-5.11.0-cp312-cp312-win32.whl (38.8KiB)
ujson-5.11.0-cp312-cp312-win_amd64.whl (42.8KiB)
ujson-5.11.0-cp312-cp312-win_arm64.whl (37.5KiB)
ujson-5.11.0-cp313-cp313-macosx_10_13_x86_64.whl (54.1KiB)
ujson-5.11.0-cp313-cp313-macosx_11_0_arm64.whl (51.9KiB)
ujson-5.11.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (56.3KiB)
ujson-5.11.0-cp313-cp313-manylinux_2_24_i686.manylinux_2_28_i686.whl (58.4KiB)
ujson-5.11.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (56.0KiB)
ujson-5.11.0-cp313-cp313-musllinux_1_2_aarch64.whl (1012.0KiB)
ujson-5.11.0-cp313-cp313-musllinux_1_2_i686.whl (1.1MiB)
ujson-5.11.0-cp313-cp313-musllinux_1_2_x86_64.whl (1.0MiB)
ujson-5.11.0-cp313-cp313-win32.whl (38.8KiB)
ujson-5.11.0-cp313-cp313-win_amd64.whl (42.8KiB)
ujson-5.11.0-cp313-cp313-win_arm64.whl (37.5KiB)
ujson-5.11.0-cp314-cp314-macosx_10_13_x86_64.whl (54.2KiB)
ujson-5.11.0-cp314-cp314-macosx_11_0_arm64.whl (52.0KiB)
ujson-5.11.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (56.3KiB)
ujson-5.11.0-cp314-cp314-manylinux_2_24_i686.manylinux_2_28_i686.whl (58.5KiB)
ujson-5.11.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (56.0KiB)
ujson-5.11.0-cp314-cp314-musllinux_1_2_aarch64.whl (1012.1KiB)
ujson-5.11.0-cp314-cp314-musllinux_1_2_i686.whl (1.1MiB)
ujson-5.11.0-cp314-cp314-musllinux_1_2_x86_64.whl (1.0MiB)
ujson-5.11.0-cp314-cp314-win32.whl (40.1KiB)
ujson-5.11.0-cp314-cp314-win_amd64.whl (44.1KiB)
ujson-5.11.0-cp314-cp314-win_arm64.whl (38.8KiB)
ujson-5.11.0-cp314-cp314t-macosx_10_13_x86_64.whl (54.5KiB)
ujson-5.11.0-cp314-cp314t-macosx_11_0_arm64.whl (52.4KiB)
ujson-5.11.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (57.2KiB)
ujson-5.11.0-cp314-cp314t-manylinux_2_24_i686.manylinux_2_28_i686.whl (59.1KiB)
ujson-5.11.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (56.7KiB)
ujson-5.11.0-cp314-cp314t-musllinux_1_2_aarch64.whl (1012.9KiB)
ujson-5.11.0-cp314-cp314t-musllinux_1_2_i686.whl (1.1MiB)
ujson-5.11.0-cp314-cp314t-musllinux_1_2_x86_64.whl (1.0MiB)
ujson-5.11.0-cp314-cp314t-win32.whl (40.9KiB)
ujson-5.11.0-cp314-cp314t-win_amd64.whl (45.1KiB)
ujson-5.11.0-cp314-cp314t-win_arm64.whl (39.3KiB)
ujson-5.11.0-cp39-cp39-macosx_10_9_x86_64.whl (54.0KiB)
ujson-5.11.0-cp39-cp39-macosx_11_0_arm64.whl (51.9KiB)
ujson-5.11.0-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (56.5KiB)
ujson-5.11.0-cp39-cp39-manylinux_2_24_i686.manylinux_2_28_i686.whl (58.4KiB)
ujson-5.11.0-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (56.0KiB)
ujson-5.11.0-cp39-cp39-musllinux_1_2_aarch64.whl (1012.2KiB)
ujson-5.11.0-cp39-cp39-musllinux_1_2_i686.whl (1.1MiB)
ujson-5.11.0-cp39-cp39-musllinux_1_2_x86_64.whl (1.0MiB)
ujson-5.11.0-cp39-cp39-win32.whl (38.7KiB)
ujson-5.11.0-cp39-cp39-win_amd64.whl (42.8KiB)
ujson-5.11.0-cp39-cp39-win_arm64.whl (37.5KiB)
ujson-5.11.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl (50.0KiB)
ujson-5.11.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl (47.8KiB)
ujson-5.11.0-pp311-pypy311_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (49.1KiB)
ujson-5.11.0-pp311-pypy311_pp73-manylinux_2_24_i686.manylinux_2_28_i686.whl (55.3KiB)
ujson-5.11.0-pp311-pypy311_pp73-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (50.4KiB)
ujson-5.11.0-pp311-pypy311_pp73-win_amd64.whl (42.8KiB)
ujson-5.11.0.tar.gz (6.8MiB)
No dependencies