Skip to main content

Python wrapper around rapidjson

Project description

RapidJSON is an extremely fast C++ JSON serialization library.

We do not support legacy Python versions, you will need to upgrade to Python 3 to use this library.

Latest version documentation is automatically rendered by Read the Docs.

Build status Documentation status

Getting Started

First install python-rapidjson:

$ pip install python-rapidjson

Basic usage looks like this:

>>> import rapidjson
>>> data = {'foo': 100, 'bar': 'baz'}
>>> rapidjson.dumps(data)
'{"bar":"baz","foo":100}'
>>> rapidjson.loads('{"bar":"baz","foo":100}')
{'bar': 'baz', 'foo': 100}

Development

If you want to install the development version (maybe to contribute fixes or enhancements) you may clone the repository:

$ git clone --recursive https://github.com/python-rapidjson/python-rapidjson.git

A set of makefiles implement most common operations, such as build, check and release; see make help output for a list of available targets.

Performance

python-rapidjson tries to be as performant as possible while staying compatible with the json module.

The following tables show a comparison between this module and other libraries with different data sets. Last row (“overall”) is the total time taken by all the benchmarks.

Each number show the factor between the time taken by each contender and python-rapidjson (in other words, they are normalized against a value of 1.0 for python-rapidjson): the lower the number, the speedier the contender.

In bold the winner.

Serialization

serialize

dumps()[1]

Encoder()[2]

dumps(n)[3]

Encoder(n)[4]

ujson[5]

simplejson[6]

stdlib[7]

yajl[8]

100 arrays dict

1.00

0.99

0.73

0.77

0.97

4.82

2.27

1.37

100 dicts array

1.00

1.02

0.82

0.85

0.90

5.68

2.19

1.36

256 Trues array

1.00

1.04

1.24

1.09

1.31

2.41

2.04

1.12

256 ascii array

1.00

1.01

1.04

1.09

0.49

1.01

0.95

1.08

256 doubles array

1.00

1.02

1.08

1.03

6.76

7.34

6.88

3.89

256 unicode array

1.00

0.89

0.89

0.91

0.56

0.73

0.83

0.47

complex object

1.00

1.01

0.85

0.82

1.04

4.11

2.62

2.16

composite object

1.00

1.02

0.72

0.68

0.88

2.79

1.82

1.71

overall

1.00

0.99

0.73

0.78

0.97

4.81

2.27

1.36

Deserialization

deserialize

loads()[9]

Decoder()[10]

loads(n)[11]

Decoder(n)[12]

ujson

simplejson

stdlib

yajl

100 arrays dict

1.00

1.00

0.90

0.90

0.95

1.60

1.11

1.18

100 dicts array

1.00

1.04

0.86

0.86

0.94

2.00

1.43

1.27

256 Trues array

1.00

1.16

1.10

1.12

1.20

1.95

1.90

1.89

256 ascii array

1.00

1.02

1.02

1.02

1.39

1.14

1.25

1.62

256 doubles array

1.00

0.90

0.16

0.16

0.39

0.86

0.83

0.42

256 unicode array

1.00

1.01

1.01

1.00

1.02

5.14

5.34

2.40

complex object

1.00

1.01

0.73

0.73

0.88

1.60

1.14

1.20

composite object

1.00

1.02

0.81

0.81

0.85

1.97

1.42

1.26

overall

1.00

1.00

0.90

0.90

0.95

1.61

1.12

1.18

DIY

To run these tests yourself, clone the repo and run:

$ make benchmarks

or

$ make benchmarks-other

The former will focus only on RapidJSON and is particularly handy coupled with the compare past runs functionality of pytest-benchmark:

$ make benchmarks PYTEST_OPTIONS=--benchmark-autosave
# hack, hack, hack!
$ make benchmarks PYTEST_OPTIONS=--benchmark-compare=0001

----------------------- benchmark 'deserialize': 18 tests ------------------------
Name (time in us)                                                            Min…
----------------------------------------------------------------------------------
test_loads[rapidjson-256 Trues array] (NOW)                         5.2320 (1.0)
test_loads[rapidjson-256 Trues array] (0001)                        5.4180 (1.04)

To reproduce the tables above run make benchmarks-tables

Incompatibility

Here are things in the standard json library supports that we have decided not to support:

separators argument

This is mostly used for pretty printing and not supported by RapidJSON so it isn’t a high priority. We do support indent kwarg that would get you nice looking JSON anyways.

Coercing keys when dumping

json will turn True into 'True' if you dump it out but when you load it back in it’ll still be a string. We want the dump and load to return the exact same objects so we have decided not to do this coercion.

Changes

0.2.7 (2017-12-08)

  • Restore compatibility with Python < 3.6

0.2.6 (2017-12-08)

  • Fix memory leaks when using object_hook/start_object/end_object

0.2.5 (2017-09-30)

  • Fix bug where error handling code could raise an exception causing a confusing exception to be returned (PR #82)

  • Fix bug where loads’s object_hook and dumps’s default arguments could not be passed None explicitly (PR #83)

  • Fix crash when dealing with surrogate pairs (issue #81)

0.2.4 (2017-09-17)

  • Fix compatibility with MacOS/clang

0.2.3 (2017-08-24)

  • Limit the precision of DM_UNIX_TIME timestamps to six decimal digits

0.2.2 (2017-08-24)

  • Nothing new, attempt to fix production of Python 3.6 binary wheels

0.2.1 (2017-08-24)

  • Nothing new, attempt to fix production of Python 3.6 binary wheels

0.2.0 (2017-08-24)

  • New parse_mode option, implementing relaxed JSON syntax (issue #73)

  • New Encoder and Decoder, implementing a class-based interface

  • New Validator, exposing the underlying JSON schema validation (issue #71)

0.1.0 (2017-08-16)

  • Remove beta status

0.1.0b4 (2017-08-14)

  • Make execution of the test suite on Appveyor actually happen

0.1.0b3 (2017-08-12)

  • Exclude CI configurations from the source distribution

0.1.0b2 (2017-08-12)

  • Fix Powershell wheel upload script in appveyor configuration

0.1.0b1 (2017-08-12)

  • Compilable with somewhat old g++ (issue #69)

  • Backward incompatibilities:

    • all DATETIME_MODE_XXX constants have been shortened to DM_XXX DATETIME_MODE_ISO8601_UTC has been renamed to DM_SHIFT_TO_UTC

    • all UUID_MODE_XXX constants have been shortened to UM_XXX

  • New option DM_UNIX_TIME to serialize date, datetime and time values as UNIX timestamps targeting issue #61

  • New option DM_NAIVE_IS_UTC to treat naïve datetime and time values as if they were in the UTC timezone (also for issue #61)

  • New keyword argument number_mode to use underlying C library numbers

  • Binary wheels for GNU/Linux and Windows on PyPI (one would hope: this is the reason for the beta1 release)

0.0.11 (2017-03-05)

  • Fix a couple of refcount handling glitches, hopefully targeting issue #48.

0.0.10 (2017-03-02)

  • Fix source distribution to contain all required stuff (PR #64)

0.0.9 (2017-03-02)

0.0.8 (2016-12-09)

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

python-rapidjson-0.2.7.tar.gz (171.8 kB view details)

Uploaded Source

Built Distributions

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

python_rapidjson-0.2.7-cp36-cp36m-win_amd64.whl (91.1 kB view details)

Uploaded CPython 3.6mWindows x86-64

python_rapidjson-0.2.7-cp36-cp36m-win32.whl (81.7 kB view details)

Uploaded CPython 3.6mWindows x86

python_rapidjson-0.2.7-cp36-cp36m-manylinux1_x86_64.whl (730.7 kB view details)

Uploaded CPython 3.6m

python_rapidjson-0.2.7-cp36-cp36m-manylinux1_i686.whl (700.9 kB view details)

Uploaded CPython 3.6m

python_rapidjson-0.2.7-cp35-cp35m-win_amd64.whl (91.1 kB view details)

Uploaded CPython 3.5mWindows x86-64

python_rapidjson-0.2.7-cp35-cp35m-win32.whl (81.7 kB view details)

Uploaded CPython 3.5mWindows x86

python_rapidjson-0.2.7-cp35-cp35m-manylinux1_x86_64.whl (730.4 kB view details)

Uploaded CPython 3.5m

python_rapidjson-0.2.7-cp35-cp35m-manylinux1_i686.whl (700.7 kB view details)

Uploaded CPython 3.5m

python_rapidjson-0.2.7-cp34-cp34m-win_amd64.whl (85.4 kB view details)

Uploaded CPython 3.4mWindows x86-64

python_rapidjson-0.2.7-cp34-cp34m-win32.whl (80.2 kB view details)

Uploaded CPython 3.4mWindows x86

python_rapidjson-0.2.7-cp34-cp34m-manylinux1_x86_64.whl (730.0 kB view details)

Uploaded CPython 3.4m

python_rapidjson-0.2.7-cp34-cp34m-manylinux1_i686.whl (700.5 kB view details)

Uploaded CPython 3.4m

File details

Details for the file python-rapidjson-0.2.7.tar.gz.

File metadata

File hashes

Hashes for python-rapidjson-0.2.7.tar.gz
Algorithm Hash digest
SHA256 b342ed41262960821009b0e930dd02a327fd890219b73ccfc530ec720e39e69d
MD5 f12c2fbeed76e6f87edb1000338360ec
BLAKE2b-256 2cc750e7ea97906eb51482d47be13ef2f218fc6aae6fb472585585ad8e507a81

See more details on using hashes here.

File details

Details for the file python_rapidjson-0.2.7-cp36-cp36m-win_amd64.whl.

File metadata

File hashes

Hashes for python_rapidjson-0.2.7-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 6777fcda0327feb0749754e0ae4fcd0afff3b022d94609870b7400250caf4055
MD5 13dbf9ccaea1fd775cda0dce71b0a593
BLAKE2b-256 ed4c8987f489c5679eec5250af48627e4f46bc4f040c95e9dbeabaa83f10989f

See more details on using hashes here.

File details

Details for the file python_rapidjson-0.2.7-cp36-cp36m-win32.whl.

File metadata

File hashes

Hashes for python_rapidjson-0.2.7-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 7a43a073cb5133d64d4b4e2bfa40185a9eb0e53c8f512da97bbf9e233304d005
MD5 4c7cc9e85f4a89b713d5156f6fc17cd6
BLAKE2b-256 b5ed4d6cb882d9c4ba73783cf6211bde87ebc1bbb74dabbe7a17a63add091e48

See more details on using hashes here.

File details

Details for the file python_rapidjson-0.2.7-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for python_rapidjson-0.2.7-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 f7eb3f0afde7bbe3d3d48b25ffc8aa54fc800c40f9247cac01bf4004d8d2fc1d
MD5 0dd0f9b3093ae8ce78e9c3888b0fc99a
BLAKE2b-256 bc37ee5223ddcba75c7a604b0bd38d4af1f0e8a60505ba08e419f8ace42096bf

See more details on using hashes here.

File details

Details for the file python_rapidjson-0.2.7-cp36-cp36m-manylinux1_i686.whl.

File metadata

File hashes

Hashes for python_rapidjson-0.2.7-cp36-cp36m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 011d782dd4eded008a10cc279d4b45f0dfd9c52570e02bfb375f8836ec0e1216
MD5 ca137a73981b91ae7f96662d541b8e4b
BLAKE2b-256 a35e500d820663308a5ab41c440ec982790baed1e8938d32cd58863b4aa97595

See more details on using hashes here.

File details

Details for the file python_rapidjson-0.2.7-cp35-cp35m-win_amd64.whl.

File metadata

File hashes

Hashes for python_rapidjson-0.2.7-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 3ed4f9f620a8a17bccc12c4943aab9fe2e1957208fea4f2eb7f27ae1369df768
MD5 c8ca232fda26c67c80018a96f6dac2cd
BLAKE2b-256 07ce7f11d4a7499ee3649e58c7330b3bf6dead7b0c677f0ecc20976aa641c7b1

See more details on using hashes here.

File details

Details for the file python_rapidjson-0.2.7-cp35-cp35m-win32.whl.

File metadata

File hashes

Hashes for python_rapidjson-0.2.7-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 79b525e19df114efd26b4a2717e8ec0f73f5448d36dfe51a65603047d4def108
MD5 188253cb55d61aefeb5a43bc89b52b6a
BLAKE2b-256 0d16a2f8e0f878559a46d32052a879d7661a8139f899a72f90460392ca9fa17d

See more details on using hashes here.

File details

Details for the file python_rapidjson-0.2.7-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for python_rapidjson-0.2.7-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 a5121a61bccc4b887957dff57fd7a2dc5d87d977dbeb1e91e844b876e139a563
MD5 1e7229e5cb448086b9497e8ca3b1f241
BLAKE2b-256 69522346362ebdd8e29f64ac1f134842f324fc9d7509abb4e20bb548cd773c21

See more details on using hashes here.

File details

Details for the file python_rapidjson-0.2.7-cp35-cp35m-manylinux1_i686.whl.

File metadata

File hashes

Hashes for python_rapidjson-0.2.7-cp35-cp35m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 39fc3e7a207dc8e5ab2f8de9cf42d5eccd46413cdfb063832bd3192cf8d019a8
MD5 580ef6b569176f206354ac214f601323
BLAKE2b-256 fd77da1ab57f10c6433f149b57c46db9db5aa81ec1255a64cbd2732bda972e5e

See more details on using hashes here.

File details

Details for the file python_rapidjson-0.2.7-cp34-cp34m-win_amd64.whl.

File metadata

File hashes

Hashes for python_rapidjson-0.2.7-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 f651374528fc28fb3c8c9b49ee0ff33d61f43d3d76452f76dd66bb783e75470e
MD5 6ea97d42e47156e1b8dfc44e53c62503
BLAKE2b-256 cbea359504f59130fbf6a28f17d7c173f88fbd1b6dd9edca3771f95e1432e200

See more details on using hashes here.

File details

Details for the file python_rapidjson-0.2.7-cp34-cp34m-win32.whl.

File metadata

File hashes

Hashes for python_rapidjson-0.2.7-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 76eeb9bdbcefe468fb2f6dd07510ab934833df6c4beafeae43c70e85ef9759f0
MD5 e94eb67e3fcdd0ed549ee0270a4e5c56
BLAKE2b-256 d9ad3af498d9995911441f3afb55ff136d3da8e5274d6165a6fb041d34023c34

See more details on using hashes here.

File details

Details for the file python_rapidjson-0.2.7-cp34-cp34m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for python_rapidjson-0.2.7-cp34-cp34m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 b5399a0112ed758a260a3a92109dabed270cb8f06f350acffa99551c81e28a0f
MD5 4fb0820bf6d765ac840cf32f2f75253c
BLAKE2b-256 551294fc634151892251a277aae1f147a0aac134942098571571929fd02aac3d

See more details on using hashes here.

File details

Details for the file python_rapidjson-0.2.7-cp34-cp34m-manylinux1_i686.whl.

File metadata

File hashes

Hashes for python_rapidjson-0.2.7-cp34-cp34m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 bee27ca8aced4a1d439f8e7f2e7bebd45d91069a551acdccdb153be778000753
MD5 e3cc594a5927944277e6a2b339ed72a8
BLAKE2b-256 694897ad76f7af1e2bd88438f5a2150a6e03899ad26632d521927f04482c8a20

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