Skip to main content

Ultra fast JSON encoder and decoder for Python

Project description

UltraJSON is a fast and extendable JSON encoder and decoder written in pure C

Python bindings are available as the module ujson (through easy_install / pypi):
http://pypi.python.org/pypi/ujson/


Installation instructions:

1. Build and install ujson Python extension (requires root)
Go to <root>/python
Type: python setup.py build install

2. Run tests (as needed)
Type: python tests.py

Benchmarks:

64-bit benchmarks Linux
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
OS Version: Ubuntu 11.04
System Type: x64-based PC
Processor: Intel(R) Core(TM) i5-2300 CPU @ 2.80GHz
Total Physical Memory: 4096 MB

py-yajl 0.3.5 => http://rtyler.github.com/py-yajl
simplejson 2.1.2 => http://simplejson.readthedocs.org/en/latest/index.html
cjson 1.0.5 => http://pypi.python.org/pypi/python-cjson

Note: Some of the string benchmarks are unfair as much of the final performance depends on to what extent the individual JSON encoders/decoders implement the JSON specification and Unicode standard.
At the time of writing py-yayl and cjson did not fully comply to the JSON specification and Unicode standard.

Array with 256 utf-8 strings:
*yajl encode : 5132.81010 calls/sec
ujson encode : 2793.22602 calls/sec
simplejson encode : 1609.20858 calls/sec
cjson encode : 139.65933 calls/sec
*) Output not ASCII but UTF-8 (default escaping behaviour not implemented)

ujson decode : 1404.18567 calls/sec
cjson decode : 814.54848 calls/sec
yajl decode : 594.28917 calls/sec
simplejson decode : 347.25104 calls/sec


Medium complex object:
ujson encode : 18757.01101 calls/sec
yajl encode : 6315.14030 calls/sec
simplejson encode : 5542.03928 calls/sec
cjson encode : 4651.59072 calls/sec

ujson decode : 10759.69649 calls/sec
simplejson decode : 8148.35221 calls/sec
cjson decode : 7931.04387 calls/sec
yajl decode : 5887.38201 calls/sec

Array with 256 strings:
ujson encode : 40427.72790 calls/sec
yajl encode : 23158.54336 calls/sec
simplejson encode : 22544.31270 calls/sec
cjson encode : 12726.16278 calls/sec

*simplejson decode : 28077.25572 calls/sec
ujson decode : 26161.35785 calls/sec
cjson decode : 25661.96211 calls/sec
yajl decode : 13565.59414 calls/sec

*) Specific decoder advantage from 8-bit strings (character encoding not preserved)

Array with 256 doubles:
cjson encode : 10890.30488 calls/sec
yajl encode : 6335.60567 calls/sec
ujson encode : 6035.47694 calls/sec
simplejson encode : 4153.79495 calls/sec

ujson decode : 27824.38869 calls/sec
simplejson decode : 12599.16997 calls/sec
yajl decode : 11014.36990 calls/sec
cjson decode : 8082.23784 calls/sec

Array with 256 True values:
ujson encode : 189406.12793 calls/sec
yajl encode : 97727.04396 calls/sec
cjson encode : 73106.77801 calls/sec
simplejson encode : 50481.90233 calls/sec

ujson decode : 148107.72025 calls/sec
simplejson decode : 125620.84065 calls/sec
cjson decode : 76946.51962 calls/sec
yajl decode : 73256.86109 calls/sec

Array with 256 dict{string, int} pairs:
ujson encode : 26391.91864 calls/sec
yajl encode : 12496.90579 calls/sec
simplejson encode : 6294.72548 calls/sec
cjson encode : 5044.07534 calls/sec

ujson decode : 16069.25600 calls/sec
cjson decode : 13145.57687 calls/sec
simplejson decode : 10464.16719 calls/sec
yajl decode : 8713.18458 calls/sec

Dict with 256 arrays with 256 dict{string, int} pairs:
ujson encode : 93.33057 calls/sec
yajl encode : 47.37864 calls/sec
cjson encode : 19.17972 calls/sec
simplejson encode : 18.89625 calls/sec

ujson decode : 42.76765 calls/sec
cjson decode : 33.52049 calls/sec
simplejson decode : 25.83548 calls/sec
yajl decode : 24.70140 calls/sec



32-bit benchmarks Windows
Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)]
OS Version: 6.1.7601 Service Pack 1 Build 7601
System Type: x64-based PC
Processor: Intel(R) Core(TM)2 Quad CPU Q9550 @ 2.83GHz 2.83 GHz
Total Physical Memory: 8191 MB

Array with 256 utf-8 strings:
ujson encode : 1191.98175 calls/sec
simplejson encode : 1013.98279 calls/sec
cjson encode : 1040.66063 calls/sec

ujson decode : 1215.66875 calls/sec
cjson decode : 493.30484 calls/sec
simplejson decode : 269.85512 calls/sec

Medium complex object:
ujson encode : 10307.63723 calls/sec
simplejson encode : 2534.94769 calls/sec
cjson encode : 2047.95118 calls/sec

ujson decode : 7274.10026 calls/sec
cjson decode : 3575.39307 calls/sec
simplejson decode : 3565.51252 calls/sec

Array with 256 strings:
ujson encode : 21348.25210 calls/sec
simplejson encode : 15736.74638 calls/sec
cjson encode : 6371.26334 calls/sec

ujson decode : 26050.25316 calls/sec
cjson decode : 16468.88215 calls/sec
simplejson decode : 21115.75770 calls/sec

Array with 256 doubles:
ujson encode : 26975.49110 calls/sec
simplejson encode : 2046.29746 calls/sec
cjson encode : 2133.56594 calls/sec

ujson decode : 28430.33722 calls/sec
cjson decode : 4114.36400 calls/sec
simplejson decode : 4419.08507 calls/sec

Array with 256 True values:
ujson encode : 89846.12897 calls/sec
simplejson encode : 34288.36862 calls/sec
cjson encode : 47168.35849 calls/sec

ujson decode : 99423.47549 calls/sec
cjson decode : 58795.91460 calls/sec
simplejson decode : 76296.14699 calls/sec

Array with 256 dict{string, int} pairs:
ujson encode : 14776.41614 calls/sec
simplejson encode : 3876.86634 calls/sec
cjson encode : 3050.65343 calls/sec

ujson decode : 12934.39432 calls/sec
cjson decode : 7993.04345 calls/sec
simplejson decode : 7152.09475 calls/sec

Here is the benchmark run from a 32bit CentOS 5.6 (Python 2.4) machine:

Array with 256 utf-8 strings:
ujson encode : 1453.30891 calls/sec
simplejson encode : 658.31181 calls/sec
cjson encode : 62.18416 calls/sec

ujson decode : 1016.58767 calls/sec
cjson decode : 455.28550 calls/sec
simplejson decode : 124.20439 calls/sec

Medium complex object:
ujson encode : 6010.21634 calls/sec
simplejson encode : 1418.77823 calls/sec
cjson encode : 1252.92530 calls/sec

ujson decode : 4637.52630 calls/sec
cjson decode : 3444.13604 calls/sec
simplejson decode : 2166.18641 calls/sec

Array with 256 strings:
ujson encode : 12252.28889 calls/sec
simplejson encode : 9351.67532 calls/sec
cjson encode : 7786.13697 calls/sec

ujson decode : 10951.17394 calls/sec
cjson decode : 15971.02425 calls/sec
simplejson decode : 6796.77480 calls/sec

Array with 256 doubles:
ujson encode : 16300.61218 calls/sec
simplejson encode : 1613.39428 calls/sec
cjson encode : 2035.58937 calls/sec

ujson decode : 17301.00746 calls/sec
cjson decode : 5785.33627 calls/sec
simplejson decode : 6199.49364 calls/sec

Array with 256 True values:
ujson encode : 72618.15350 calls/sec
simplejson encode : 18707.57593 calls/sec
cjson encode : 24150.26201 calls/sec

ujson decode : 53650.94162 calls/sec
cjson decode : 48069.53050 calls/sec
simplejson decode : 47098.40293 calls/sec

Array with 256 dict{string, int} pairs:
ujson encode : 8811.85922 calls/sec
simplejson encode : 2756.91262 calls/sec
cjson encode : 1758.26962 calls/sec

ujson decode : 6490.36358 calls/sec
cjson decode : 6330.77263 calls/sec
simplejson decode : 4161.97048 calls/sec

Dict with 256 arrays with 256 dict{string, int} pairs:
ujson encode : 31.08834 calls/sec
simplejson encode : 10.41434 calls/sec
cjson encode : 6.93790 calls/sec

ujson decode : 19.81373 calls/sec
cjson decode : 20.31727 calls/sec
simplejson decode : 15.05690 calls/sec


See (python/benchmark.py) for further information.


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-1.19.zip (191.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

ujson-1.19.win32-py3.2.exe (209.8 kB view details)

Uploaded Source

ujson-1.19.win32-py2.7.exe (209.8 kB view details)

Uploaded Source

File details

Details for the file ujson-1.19.zip.

File metadata

  • Download URL: ujson-1.19.zip
  • Upload date:
  • Size: 191.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for ujson-1.19.zip
Algorithm Hash digest
SHA256 2fc787104b5b8aee9bd6a3f8a0f3c51aae9bd7140913df8727b0fd85d8f9c3f5
MD5 e30ea6460bf71fc5bf2cfb77edbb1932
BLAKE2b-256 1f5bb83bb26e894634777066c1a4d3d9d472323fdd5039b2588d13d0e64d73a9

See more details on using hashes here.

File details

Details for the file ujson-1.19.win32-py3.2.exe.

File metadata

  • Download URL: ujson-1.19.win32-py3.2.exe
  • Upload date:
  • Size: 209.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for ujson-1.19.win32-py3.2.exe
Algorithm Hash digest
SHA256 b222345c75bca3b76c3a9dc95dbf4452df7c44b3a8ca1ed584dd87eca7632ddc
MD5 b0de380f63090fa368e54e7a33547cbf
BLAKE2b-256 5af78d14298b3c3be6d4f90d3f92f4d10aeb467701d553cec623ca9b7c27c865

See more details on using hashes here.

File details

Details for the file ujson-1.19.win32-py2.7.exe.

File metadata

  • Download URL: ujson-1.19.win32-py2.7.exe
  • Upload date:
  • Size: 209.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for ujson-1.19.win32-py2.7.exe
Algorithm Hash digest
SHA256 a3202e0a59bcdffa0b5fc2160db78017f8617faeec20cbbebb78dd6814b54401
MD5 a5eda15e99f6091e9e550887b35e7fd4
BLAKE2b-256 d4c60745b86eddd3d49b53af21d1533ed6f67cad008d31b4548ffd4f421ef078

See more details on using hashes here.

Supported by

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