Skip to main content

Ultra fast JSON encoder and decoder for Python

Project description

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.7+.

Install with pip:

python -m pip install ujson

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("http://esn.me")
'"http:\\/\\/esn.me"'
>>> ujson.dumps("http://esn.me", escape_forward_slashes=False)
'"http://esn.me"'

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.0.0-1032-azure x86_64 #34-Ubuntu SMP Mon Feb 10 19:37:25 UTC 2020

Versions

  • CPython 3.8.2 (default, Feb 28 2020, 14:28:43) [GCC 7.4.0]
  • nujson : 1.35.2
  • orjson : 2.6.1
  • simplejson: 3.17.0
  • ujson : 2.0.2
ujson nujson orjson simplejson json
Array with 256 doubles
encode 22,082 4,282 76,975 5,328 5,436
decode 24,127 34,349 29,059 14,174 13,822
Array with 256 UTF-8 strings
encode 3,557 2,528 24,300 3,061 2,068
decode 2,030 2,490 931 406 358
Array with 256 strings
encode 39,041 31,769 76,403 16,615 16,910
decode 25,185 24,287 34,437 32,388 27,999
Medium complex object
encode 10,382 11,427 32,995 3,959 5,275
decode 9,785 9,796 11,515 5,898 7,200
Array with 256 True values
encode 114,341 101,039 344,256 62,382 72,872
decode 149,367 151,615 181,123 114,597 130,392
Array with 256 dict{string, int} pairs
encode 13,715 14,420 51,942 3,271 6,584
decode 12,670 11,788 12,176 6,743 8,278
Dict with 256 arrays with 256 dict{string, int} pairs
encode 50 54 216 10 23
decode 32 32 30 20 23
Dict with 256 arrays with 256 dict{string, int} pairs, outputting sorted keys
encode 46 41 8 24
Complex object
encode 533 582 408 431
decode 466 454 154 164

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ujson-5.5.0.tar.gz (7.1 MB view hashes)

Uploaded Source

Built Distributions

ujson-5.5.0-pp39-pypy39_pp73-win_amd64.whl (37.9 kB view hashes)

Uploaded PyPy Windows x86-64

ujson-5.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (42.4 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

ujson-5.5.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (41.9 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

ujson-5.5.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (48.2 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

ujson-5.5.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (44.1 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

ujson-5.5.0-pp38-pypy38_pp73-win_amd64.whl (38.0 kB view hashes)

Uploaded PyPy Windows x86-64

ujson-5.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (42.4 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

ujson-5.5.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (41.9 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

ujson-5.5.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (48.2 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

ujson-5.5.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (44.2 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

ujson-5.5.0-pp37-pypy37_pp73-win_amd64.whl (37.9 kB view hashes)

Uploaded PyPy Windows x86-64

ujson-5.5.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (43.1 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

ujson-5.5.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (42.3 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

ujson-5.5.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (48.9 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

ujson-5.5.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (44.1 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

ujson-5.5.0-cp311-cp311-win_amd64.whl (38.0 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

ujson-5.5.0-cp311-cp311-win32.whl (34.6 kB view hashes)

Uploaded CPython 3.11 Windows x86

ujson-5.5.0-cp311-cp311-musllinux_1_1_x86_64.whl (591.0 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

ujson-5.5.0-cp311-cp311-musllinux_1_1_i686.whl (649.1 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

ujson-5.5.0-cp311-cp311-musllinux_1_1_aarch64.whl (578.6 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ ARM64

ujson-5.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (46.1 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

ujson-5.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (45.4 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

ujson-5.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (55.4 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

ujson-5.5.0-cp311-cp311-macosx_11_0_arm64.whl (45.1 kB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

ujson-5.5.0-cp311-cp311-macosx_10_9_x86_64.whl (48.4 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ x86-64

ujson-5.5.0-cp310-cp310-win_amd64.whl (38.0 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

ujson-5.5.0-cp310-cp310-win32.whl (34.6 kB view hashes)

Uploaded CPython 3.10 Windows x86

ujson-5.5.0-cp310-cp310-musllinux_1_1_x86_64.whl (591.0 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

ujson-5.5.0-cp310-cp310-musllinux_1_1_i686.whl (649.0 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

ujson-5.5.0-cp310-cp310-musllinux_1_1_aarch64.whl (578.6 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ ARM64

ujson-5.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (46.0 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

ujson-5.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (45.3 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

ujson-5.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (55.4 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

ujson-5.5.0-cp310-cp310-macosx_11_0_arm64.whl (45.1 kB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

ujson-5.5.0-cp310-cp310-macosx_10_9_x86_64.whl (48.4 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

ujson-5.5.0-cp39-cp39-win_amd64.whl (38.0 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

ujson-5.5.0-cp39-cp39-win32.whl (34.6 kB view hashes)

Uploaded CPython 3.9 Windows x86

ujson-5.5.0-cp39-cp39-musllinux_1_1_x86_64.whl (591.1 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

ujson-5.5.0-cp39-cp39-musllinux_1_1_i686.whl (649.1 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

ujson-5.5.0-cp39-cp39-musllinux_1_1_aarch64.whl (578.5 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ ARM64

ujson-5.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (46.1 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

ujson-5.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (45.4 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

ujson-5.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (55.5 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

ujson-5.5.0-cp39-cp39-macosx_11_0_arm64.whl (45.1 kB view hashes)

Uploaded CPython 3.9 macOS 11.0+ ARM64

ujson-5.5.0-cp39-cp39-macosx_10_9_x86_64.whl (48.4 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

ujson-5.5.0-cp38-cp38-win_amd64.whl (38.0 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

ujson-5.5.0-cp38-cp38-win32.whl (34.6 kB view hashes)

Uploaded CPython 3.8 Windows x86

ujson-5.5.0-cp38-cp38-musllinux_1_1_x86_64.whl (591.1 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

ujson-5.5.0-cp38-cp38-musllinux_1_1_i686.whl (649.1 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

ujson-5.5.0-cp38-cp38-musllinux_1_1_aarch64.whl (578.6 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ ARM64

ujson-5.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (46.1 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

ujson-5.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (45.4 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

ujson-5.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (55.5 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

ujson-5.5.0-cp38-cp38-macosx_11_0_arm64.whl (45.1 kB view hashes)

Uploaded CPython 3.8 macOS 11.0+ ARM64

ujson-5.5.0-cp38-cp38-macosx_10_9_x86_64.whl (48.4 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

ujson-5.5.0-cp37-cp37m-win_amd64.whl (38.0 kB view hashes)

Uploaded CPython 3.7m Windows x86-64

ujson-5.5.0-cp37-cp37m-win32.whl (34.4 kB view hashes)

Uploaded CPython 3.7m Windows x86

ujson-5.5.0-cp37-cp37m-musllinux_1_1_x86_64.whl (590.9 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

ujson-5.5.0-cp37-cp37m-musllinux_1_1_i686.whl (649.0 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

ujson-5.5.0-cp37-cp37m-musllinux_1_1_aarch64.whl (578.5 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ ARM64

ujson-5.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (45.9 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

ujson-5.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (45.3 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ARM64

ujson-5.5.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (55.4 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

ujson-5.5.0-cp37-cp37m-macosx_10_9_x86_64.whl (48.2 kB view hashes)

Uploaded CPython 3.7m macOS 10.9+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page