UltraJSON is an ultra fast JSON encoder and decoder written in pure C with bindings for Python 2.7 and 3.5+.
To install it just run pip as usual:
$ pip install ujson
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]
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"'
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"'
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"'
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"
}
UltraJSON calls/sec compared to three other popular JSON parsers with performance gain specified below each.
Linux 3.13.0-66-generic x86_64 #108-Ubuntu SMP Wed Oct 7 15:20:27 UTC 2015
- CPython 2.7.6 (default, Jun 22 2015, 17:58:13) [GCC 4.8.2]
- blist : 1.3.6
- simplejson: 3.8.1
- ujson : 1.34 (0c52200eb4e2d97e548a765d5f089858c41967b0)
- yajl : 0.3.5
ujson | yajl | simplejson | json | |
---|---|---|---|---|
Array with 256 doubles | ||||
encode |
|
|
|
|
decode |
|
|
|
|
Array with 256 UTF-8 strings | ||||
encode |
|
|
|
|
decode |
|
|
|
|
Array with 256 strings | ||||
encode |
|
|
|
|
decode |
|
|
|
|
Medium complex object | ||||
encode |
|
|
|
|
decode |
|
|
|
|
Array with 256 True values | ||||
encode |
|
|
|
|
decode |
|
|
|
|
Array with 256 dict{string, int} pairs | ||||
encode |
|
|
|
|
decode |
|
|
|
|
Dict with 256 arrays with 256 dict{string, int} pairs | ||||
encode |
|
|
|
|
decode |
|
|
|
|
Dict with 256 arrays with 256 dict{string, int} pairs, outputting sorted keys | ||||
encode |
|
|
|
|
Complex object | ||||
encode |
|
|
|
|
decode |
|
|
|
|
- CPython 3.4.3 (default, Oct 14 2015, 20:28:29) [GCC 4.8.4]
- blist : 1.3.6
- simplejson: 3.8.1
- ujson : 1.34 (0c52200eb4e2d97e548a765d5f089858c41967b0)
- yajl : 0.3.5
ujson | yajl | simplejson | json | |
---|---|---|---|---|
Array with 256 doubles | ||||
encode |
|
|
|
|
decode |
|
|
|
|
Array with 256 UTF-8 strings | ||||
encode |
|
|
|
|
decode |
|
|
|
|
Array with 256 strings | ||||
encode |
|
|
|
|
decode |
|
|
|
|
Medium complex object | ||||
encode |
|
|
|
|
decode |
|
|
|
|
Array with 256 True values | ||||
encode |
|
|
|
|
decode |
|
|
|
|
Array with 256 dict{string, int} pairs | ||||
encode |
|
|
|
|
decode |
|
|
|
|
Dict with 256 arrays with 256 dict{string, int} pairs | ||||
encode |
|
|
|
|
decode |
|
|
|
|
Dict with 256 arrays with 256 dict{string, int} pairs, outputting sorted keys | ||||
encode |
|
|
|
|
Complex object | ||||
encode |
|
|
|
|
decode |
|
|
|
|