mirror of
https://github.com/ultrajson/ultrajson.git
synced 2024-11-26 10:23:45 +01:00
Ultra fast JSON decoder and encoder written in C with Python bindings
.github | ||
deps/double-conversion | ||
lib | ||
python | ||
scripts | ||
tests | ||
.gitignore | ||
.pre-commit-config.yaml | ||
.travis.yml | ||
LICENSE.txt | ||
MANIFEST.in | ||
pyproject.toml | ||
README.rst | ||
RELEASING.md | ||
setup.cfg | ||
setup.py |
UltraJSON ========= .. image:: https://img.shields.io/pypi/v/ujson.svg :alt: PyPI version :target: https://pypi.python.org/pypi/ujson .. image:: https://img.shields.io/pypi/pyversions/ujson.svg :alt: Supported Python versions :target: https://pypi.python.org/pypi/ujson .. image:: https://img.shields.io/pypi/dm/ujson.svg :alt: PyPI downloads :target: https://pypistats.org/packages/ujson .. image:: https://github.com/ultrajson/ultrajson/workflows/Test/badge.svg :alt: GitHub Actions status :target: https://github.com/ultrajson/ultrajson/actions?query=workflow%3ATest .. image:: https://travis-ci.com/ultrajson/ultrajson.svg?branch=master :alt: Travis CI status :target: https://travis-ci.com/ultrajson/ultrajson .. image:: https://zenodo.org/badge/1418941.svg :alt: DOI :target: https://zenodo.org/badge/latestdoi/1418941 .. image:: https://img.shields.io/badge/code%20style-black-000000.svg :alt: Code style: Black :target: https://github.com/psf/black UltraJSON is an ultra fast JSON encoder and decoder written in pure C with bindings for Python 3.5+. To install it just run pip as usual: .. code-block:: sh $ pip install ujson ============ Usage ============ May be used as a drop in replacement for most other JSON parsers for Python: .. code-block:: python >>> import ujson >>> ujson.dumps([{"key": "value"}, 81, True]) '[{"key":"value"},81,true]' >>> ujson.loads("""[{"key": "value"}, 81, true]""") [{u'key': u'value'}, 81, True] ~~~~~~~~~~~~~~~ Encoder options ~~~~~~~~~~~~~~~ encode_html_chars ----------------- Used to enable special encoding of "unsafe" HTML characters into safer Unicode sequences. Default is ``False``: .. code-block:: python >>> 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: .. code-block:: python >>> ujson.dumps(u"\xe5\xe4\xf6") '"\\u00e5\\u00e4\\u00f6"' >>> ujson.dumps(u"\xe5\xe4\xf6", ensure_ascii=False) '"\xc3\xa5\xc3\xa4\xc3\xb6"' escape_forward_slashes ---------------------- Controls whether forward slashes (``/``) are escaped. Default is ``True``: .. code-block:: python >>> ujson.dumps("http://esn.me") '"http:\/\/esn.me"' >>> ujson.dumps("http://esn.me", escape_forward_slashes=False) '"http://esn.me"' indent ------ Controls whether indention ("pretty output") is enabled. Default is ``0`` (disabled): .. code-block:: python >>> ujson.dumps({"foo": "bar"}) '{"foo":"bar"}' >>> 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 | +-------------------------------------------------------------------------------+------------+------------+------------+------------+------------+