1
0
mirror of https://github.com/ultrajson/ultrajson.git synced 2024-11-24 01:04:19 +01:00
Ultra fast JSON decoder and encoder written in C with Python bindings
Go to file
2015-12-28 15:46:27 +11:00
lib Removed a left-over from conflict resolution. 2015-11-30 11:58:32 +01:00
python Corrected memory leak due to not decrementing the reference count of the 2015-12-28 15:46:27 +11:00
tests Added missing check for sorted key benchmark 2015-04-09 12:33:31 +02:00
.travis.yml Use new Docker based Travis-CI 2014-12-25 16:30:58 +09:00
LICENSE.txt Updated copyright clause 2014-04-14 13:45:50 +02:00
MANIFEST.in Hopefully fixed integer and double decoding capabilities to match those of the old decoder 2013-01-18 16:17:47 +01:00
README.rst Added indent encoder option to readme 2015-04-09 14:13:50 +02:00
setup.py Try to use setuptools, for building eggs 2013-05-23 17:27:23 +03:00

UltraJSON
=============
.. image:: https://travis-ci.org/esnme/ultrajson.svg?branch=master
    :target: https://travis-ci.org/esnme/ultrajson
    
UltraJSON is an ultra fast JSON encoder and decoder written in pure C with bindings for Python 2.5+ and 3.

For a more painless day to day C/C++ JSON decoder experience please checkout ujson4c_, based on UltraJSON.

.. _ujson4c: http://github.com/esnme/ujson4c/

| Please checkout the rest of the projects in the Ultra series:
| http://github.com/esnme/ultramemcache
| http://github.com/esnme/ultramysql

To install it just run Pip as usual::

    $ 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]""")
    [{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::

    >>> 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(u"\xe5\xe4\xf6")
    '"\\u00e5\\u00e4\\u00f6"'
    >>> ujson.dumps(u"\xe5\xe4\xf6", ensure_ascii=False)
    '"\xc3\xa5\xc3\xa4\xc3\xb6"'

double_precision
----------------
Controls how many decimals to encode for double or decimal values. Default is 9::

    >>> ujson.dumps(math.pi)
    '3.1415926536'
    >>> ujson.dumps(math.pi, double_precision=1)
    '3.1'
    >>> ujson.dumps(math.pi, double_precision=0)
    '3'
    >>> ujson.dumps(math.pi, double_precision=4)
    '3.1416'

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

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

~~~~~~~~~~~~~~~~
Decoders options
~~~~~~~~~~~~~~~~    
precise_float
-------------
Set to enable usage of higher precision (strtod) function when decoding string to double values. Default is to use fast but less precise builtin functionality::

    >>> ujson.loads("4.56")
    4.5600000000000005
    >>> ujson.loads("4.56", precise_float=True)
    4.5599999999999996

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

~~~~~~~~~~~~~
Test machine:
~~~~~~~~~~~~~
Linux version 2.6.32-131.0.15.el6.x86_64

~~~~~~~~~
Versions:
~~~~~~~~~

- ujson: 1.21
- simplejson: 2.6.2
- cjson: 1.05
- yajl: 0.3.5
- Python: Python 2.6.6 (r266:84292, Jul 20 2011, 10:22:43)


+-----------------------------------------+--------+------------+--------+---------+
|                                         | ujson  | simplejson | cjson  | yajl    |
+=========================================+========+============+========+=========+
| Array with 256 utf-8 strings            |        |            |        |         |
+-----------------------------------------+--------+------------+--------+---------+
| Encode                                  | 4090,74|    899,39  |83,86   | 3189,86 |
+-----------------------------------------+--------+------------+--------+---------+
|                                         |        |       4,55 |48,78   | 1,28    |
+-----------------------------------------+--------+------------+--------+---------+
| Decode                                  | 863,29 |     586,15 |201,61  | 352,48  |
+-----------------------------------------+--------+------------+--------+---------+
|                                         |        |      1,47  | 4,28   | 2,45    |
+-----------------------------------------+--------+------------+--------+---------+
| Medium complex object                   |        |            |        |         |
+-----------------------------------------+--------+------------+--------+---------+
| Encode                                  | 9750,37|   1377,15  |1512,06 | 3341,91 |
+-----------------------------------------+--------+------------+--------+---------+
|                                         |        |     7,08   | 6,45   | 2,92    |
+-----------------------------------------+--------+------------+--------+---------+
| Decode                                  | 5576,75|   4247,16  | 3587,83| 2850,13 |
+-----------------------------------------+--------+------------+--------+---------+
|                                         |        |        1,31|   1,55 |   1,96  |
+-----------------------------------------+--------+------------+--------+---------+
| Array with 256 strings                  |        |            |        |         |
+-----------------------------------------+--------+------------+--------+---------+
| Encode                                  |17998,01|  12954,46  |8715,02 | 15924,35|
+-----------------------------------------+--------+------------+--------+---------+
|                                         |        |        1,39|    2,07|    1,13 |
+-----------------------------------------+--------+------------+--------+---------+
| Decode                                  |14540,71|  19696,13  |14908,46| 9547,14 |
+-----------------------------------------+--------+------------+--------+---------+
|                                         |        |       0,74 |   0,98 |   1,52  |
+-----------------------------------------+--------+------------+--------+---------+
| Array with 256 doubles                  |        |            |        |         |
+-----------------------------------------+--------+------------+--------+---------+
| Encode                                  | 2185,20|   1466,87  | 1956,99| 3421,10 |
+-----------------------------------------+--------+------------+--------+---------+
|                                         |        |        1,49|   1,12 |  0,64   |
+-----------------------------------------+--------+------------+--------+---------+
| Decode                                  |16062,01|  8990,50   | 9743,40|8331,74  |
+-----------------------------------------+--------+------------+--------+---------+
|                                         |        |        1,79|    1,65|   1,93  |
+-----------------------------------------+--------+------------+--------+---------+
| Array with 256 True values              |        |            |        |         |
+-----------------------------------------+--------+------------+--------+---------+
| Encode                                  |69767,60|  25202,56  |41145,99|64330,76 |
+-----------------------------------------+--------+------------+--------+---------+
|                                         |        |       2,77 |  1,70  |  1,08   |
+-----------------------------------------+--------+------------+--------+---------+
|Decode                                   |91416,02|  56439,97  |54918,09| 42786,02|
+-----------------------------------------+--------+------------+--------+---------+
|                                         |        |        1,62|   1,66 |  2,14   |
+-----------------------------------------+--------+------------+--------+---------+
| Array with 256 dict{string, int} pairs  |        |            |        |         |
+-----------------------------------------+--------+------------+--------+---------+
|                                         |        |            |        |         |
+-----------------------------------------+--------+------------+--------+---------+
| Encode                                  |11307,54|   1830,45  | 2720,90| 7725,56 |
+-----------------------------------------+--------+------------+--------+---------+
|                                         |        |        6,18|   4,16 |  1,46   |
+-----------------------------------------+--------+------------+--------+---------+
| Decode                                  |8695,94 |  7572,89   | 6076,71|5231,32  |
+-----------------------------------------+--------+------------+--------+---------+
|                                         |        |        1,15|    1,43|   1,66  |
+-----------------------------------------+--------+------------+--------+---------+
| Dict with 256 arrays with 256 dict      |        |            |        |         |
+-----------------------------------------+--------+------------+--------+---------+
| Encode                                  | 37,76  |    4,88    | 10,49  | 27,62   |
+-----------------------------------------+--------+------------+--------+---------+
|                                         |        |        7,74|    3,60| 1,37    |
+-----------------------------------------+--------+------------+--------+---------+
|Decode                                   |  17,70 |    15,56   | 11,25  | 12,00   |
+-----------------------------------------+--------+------------+--------+---------+
|                                         |        |        1,14|    1,57|    1,47 |
+-----------------------------------------+--------+------------+--------+---------+