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.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.1.tar.gz (169.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.1-cp36-cp36m-win_amd64.whl (90.3 kB view details)

Uploaded CPython 3.6mWindows x86-64

python_rapidjson-0.2.1-cp36-cp36m-win32.whl (80.9 kB view details)

Uploaded CPython 3.6mWindows x86

python_rapidjson-0.2.1-cp35-cp35m-win_amd64.whl (90.3 kB view details)

Uploaded CPython 3.5mWindows x86-64

python_rapidjson-0.2.1-cp35-cp35m-win32.whl (80.9 kB view details)

Uploaded CPython 3.5mWindows x86

python_rapidjson-0.2.1-cp35-cp35m-manylinux1_x86_64.whl (726.1 kB view details)

Uploaded CPython 3.5m

python_rapidjson-0.2.1-cp35-cp35m-manylinux1_i686.whl (694.5 kB view details)

Uploaded CPython 3.5m

python_rapidjson-0.2.1-cp34-cp34m-win_amd64.whl (84.5 kB view details)

Uploaded CPython 3.4mWindows x86-64

python_rapidjson-0.2.1-cp34-cp34m-win32.whl (79.8 kB view details)

Uploaded CPython 3.4mWindows x86

python_rapidjson-0.2.1-cp34-cp34m-manylinux1_x86_64.whl (725.7 kB view details)

Uploaded CPython 3.4m

python_rapidjson-0.2.1-cp34-cp34m-manylinux1_i686.whl (697.7 kB view details)

Uploaded CPython 3.4m

File details

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

File metadata

File hashes

Hashes for python-rapidjson-0.2.1.tar.gz
Algorithm Hash digest
SHA256 db1cf4951e49c50b611badd606547461e000546eece640865582f5716d2008ae
MD5 a4ff3fcae4d2882c97abbb55bdf10cd4
BLAKE2b-256 bc650665c9d9b148cb795a44779d0788970a5212384ba0a12cec758761bd9683

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for python_rapidjson-0.2.1-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 0e43e61a47cb3661186601cf5eff48f4f322ec0e4310db0a93ff0e16b7396189
MD5 a6f19b4931f506e6b967c59bc026b6fb
BLAKE2b-256 2bb3a277efe7bbf061a10661372a7938f36e1f81d49b5a19af41192053ff5cf5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for python_rapidjson-0.2.1-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 9809dac5454f42d317370fafc77387825a80aca16ad6d62fc888b14a6ec56ff3
MD5 b6ab1cdeaa2b0776151f86a11fc7bbd6
BLAKE2b-256 cf762464ee13e87399f82256d030cec2919ae810039bf1f57f28b3abb3fc0094

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for python_rapidjson-0.2.1-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 a1d20295c9dcb261dfe47cce009bf89464182a54ba99982c9f163860656eadd9
MD5 874490f2a6ee7c0668b5099959815d27
BLAKE2b-256 117d0f6d88992241d5333a9fd0e35cfa8939bf77bf844839ad704ca56bcae89f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for python_rapidjson-0.2.1-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 ab12358a741a9844f5a604d137b7165df7e4056369086b69a180439f85ba8e6f
MD5 89653830d74cecd8b2e082f63089b560
BLAKE2b-256 5d2853a8d0356e2c2d95c649319649406ea75b5c6d4bda7e80399926b7888afc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for python_rapidjson-0.2.1-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 207fdafe293646f39f0a355188c6b41b0d9b169ddfca8796399cd52889401b32
MD5 b94b5011d831c9ddd8442a5dbe2204f5
BLAKE2b-256 264a8942c8c6bd9141f323ab6f5926c2b09f27ab259357ecdbb921bf53d323b3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for python_rapidjson-0.2.1-cp35-cp35m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 67b740c5229b905dea9b4bc12dda1dc5d919977050b1b6d57a992a06b1224fb3
MD5 df19070ad2b301a3711d48209929f072
BLAKE2b-256 0153658d0e5e5e1ff92f4870e5bba34f87eb049678437c567eebcc0fb8c076f1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for python_rapidjson-0.2.1-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 03462c274a7b9f15928d3d562ce7e916cd8e9f9612dbb60f1a26393c1121e32a
MD5 05edda36d2bc9e63e3d4f41be7a0682d
BLAKE2b-256 288a79e1399bccb72d8d98e5af7d3e7841b868a43a390456ada743d6854f9c1f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for python_rapidjson-0.2.1-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 7ff08e1e909161f33a545f50b10960b9e104eb4520b4277be54ebc157ac8f966
MD5 5d0e62862c0e3ed87f78f6cd0580217a
BLAKE2b-256 f8069a8205cf70f6b866c67f758746b8cdd30a46f2729e7b1616ce3e62157823

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for python_rapidjson-0.2.1-cp34-cp34m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 b1d2dc252d6d3cdfe5564e3d0309c07032d8a83dd1799fa113393c90f7b997ca
MD5 c8623429c195dac032661068b6843383
BLAKE2b-256 022f8badcf9aee9dc25ce4cd3a4437799fef1f775e78fff10913392f36e9419d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for python_rapidjson-0.2.1-cp34-cp34m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 a113e534ad232bf3b8fed81c5ecc9c4e056159e7023c270566c6ba1c7ed40abf
MD5 d802d818c4590864f8daa5c397a9dc8b
BLAKE2b-256 b898b38b229c62b64f3e81a932de437afd48fcdc5af614747e6b9dbb4cc7d6a4

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