1
0
Fork 0
mirror of https://github.com/ultrajson/ultrajson.git synced 2024-04-28 17:55:10 +02:00
Ultra fast JSON decoder and encoder written in C with Python bindings
Go to file
Hugo van Kemenade e999525b00
Merge pull request #459 from hugovk/rm-unused
Remove unused variable
2021-04-12 20:24:45 +03:00
.github Add codecov upload to CI/CD. 2021-04-06 21:40:54 +01:00
deps/double-conversion Lint end-of-file-fixer 2020-05-12 09:36:47 +03:00
lib Remove unused variable 2021-04-07 10:23:26 +03:00
python Match Python json output for exponents 2020-11-11 14:41:51 +01:00
scripts Drop colored gcov output on Linux. 2021-04-06 21:40:58 +01:00
tests [pre-commit.ci] auto fixes from pre-commit.com hooks 2021-04-12 16:41:58 +00:00
.gitignore Add gcov coverage collecting of C code (#387) 2021-03-30 22:35:12 +01:00
.pre-commit-config.yaml [pre-commit.ci] pre-commit autoupdate 2021-04-12 16:41:46 +00:00
.travis.yml Only test oldest and newest Python on Travis CI 2020-11-15 19:33:38 +02:00
LICENSE.txt Lint end-of-file-fixer 2020-05-12 09:36:47 +03:00
MANIFEST.in include license file in manifest 2020-02-18 20:01:47 +01:00
README.rst Remove dollar for easier copy/paste 2021-03-05 15:11:18 +02:00
RELEASING.md Update release checklist now wheels are built and deployed from CI 2020-06-03 19:50:34 +03:00
pyproject.toml Update pre-commit 2020-09-08 21:36:50 +03:00
setup.cfg Update pre-commit 2020-09-08 21:36:50 +03:00
setup.py Fix UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 2116: ordinal not in range(128) 2020-10-09 19:43:28 +03:00

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

Install with pip:

.. code-block:: sh

    python -m 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]""")
    [{'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``:

.. 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("åäö")
    '"\\u00e5\\u00e4\\u00f6"'
    >>> ujson.dumps("åäö", ensure_ascii=False)
    '"åäö"'

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 indentation ("pretty output") is enabled. Default is ``0`` (disabled):

.. code-block:: python

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