Skip to main content

JSON encoder and decoder for Python

Project description

MrJSON

MrJSON is a JSON encoder and decoder written in C/C++ with bindings for Python 2.5+ and 3. I needed faster performance for long strings and floats and MrJSON benchmarks at 2-3 times faster than the fastest python parsers for my use cases.

To install it just run Pip as usual:

    $ pip install mrjson

Usage

May be used as a replacement for json

    >>> import mrjson as json
    >>> json.dumps([{"key": "value"}, 81, True])
    '[{"key":"value"},81,true]'
    >>> json.loads("""[{"key": "value"}, 81, true]""")
    [{'key': 'value'}, 81, True]

Encoder differences

ensure_ascii defaults to true in the base json module, but defaults to false here for space and performance reasons.

indent, separators, and sortKeys are not supported as pretty printing doesn't need the performance. Write an issue if you have a use case.

allow_nan is unsupported as NaN and infinity are supported by default.

Custom objects are supported if they implement an json() method returning a valid json string.

Benchmarks

Benchmark your own files as results can vary significantly:

$ python -m timeit -s "import mrjson as json;st = open('canada.json').read();" "json.loads(st)"
100 loops, best of 3: 8.05 msec per loop

$ python -m timeit -s "import json;st = open('canada.json').read();" "json.loads(st)"
10 loops, best of 3: 32.7 msec per loop

Or run bench.py to test MrJSON against some other modules. MrJSON does particularly well decoding long strings and floating point numbers thanks to intel's AVX2 instructions and Milo Yip at Tencent for publishing C++ code implementing Florian Loitsch's float to string algorithms.

Loads

Only 128 byte long strings.

Mostly floating point numbers - canada.json from The Native JSON Benchmark, the fastest C++ JSON parser comes in at 7.9 milliseconds on this machine for comparison

A single tweet from twitter - twit.json

citm_catalog.json from The Native JSON Benchmark

Dumps

Only 128 byte long strings.

Mostly floating point numbers - canada.json from The Native JSON Benchmark

A single tweet from twitter - twit.json

citm_catalog.json from The Native JSON Benchmark

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

mrjson-1.4.tar.gz (22.0 kB view hashes)

Uploaded Source

Built Distributions

mrjson-1.4-pp310-pypy310_pp73-win_amd64.whl (18.2 kB view hashes)

Uploaded PyPy Windows x86-64

mrjson-1.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (24.9 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

mrjson-1.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (28.6 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

mrjson-1.4-pp310-pypy310_pp73-macosx_10_9_x86_64.whl (19.7 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

mrjson-1.4-pp39-pypy39_pp73-win_amd64.whl (18.2 kB view hashes)

Uploaded PyPy Windows x86-64

mrjson-1.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (24.9 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

mrjson-1.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (28.6 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

mrjson-1.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (19.6 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

mrjson-1.4-pp38-pypy38_pp73-win_amd64.whl (18.2 kB view hashes)

Uploaded PyPy Windows x86-64

mrjson-1.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25.0 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

mrjson-1.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (28.6 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

mrjson-1.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (19.7 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

mrjson-1.4-pp37-pypy37_pp73-win_amd64.whl (18.2 kB view hashes)

Uploaded PyPy Windows x86-64

mrjson-1.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25.0 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

mrjson-1.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (28.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

mrjson-1.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (19.6 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

mrjson-1.4-cp312-cp312-win_amd64.whl (18.1 kB view hashes)

Uploaded CPython 3.12 Windows x86-64

mrjson-1.4-cp312-cp312-win32.whl (18.0 kB view hashes)

Uploaded CPython 3.12 Windows x86

mrjson-1.4-cp312-cp312-musllinux_1_1_x86_64.whl (86.0 kB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ x86-64

mrjson-1.4-cp312-cp312-musllinux_1_1_i686.whl (86.6 kB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ i686

mrjson-1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (79.6 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

mrjson-1.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (81.1 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

mrjson-1.4-cp312-cp312-macosx_10_9_x86_64.whl (20.6 kB view hashes)

Uploaded CPython 3.12 macOS 10.9+ x86-64

mrjson-1.4-cp311-cp311-win_amd64.whl (18.1 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

mrjson-1.4-cp311-cp311-win32.whl (17.9 kB view hashes)

Uploaded CPython 3.11 Windows x86

mrjson-1.4-cp311-cp311-musllinux_1_1_x86_64.whl (85.2 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

mrjson-1.4-cp311-cp311-musllinux_1_1_i686.whl (86.4 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

mrjson-1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (78.0 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

mrjson-1.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (80.1 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

mrjson-1.4-cp311-cp311-macosx_10_9_x86_64.whl (20.4 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ x86-64

mrjson-1.4-cp310-cp310-win_amd64.whl (18.1 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

mrjson-1.4-cp310-cp310-win32.whl (17.9 kB view hashes)

Uploaded CPython 3.10 Windows x86

mrjson-1.4-cp310-cp310-musllinux_1_1_x86_64.whl (82.0 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

mrjson-1.4-cp310-cp310-musllinux_1_1_i686.whl (83.2 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

mrjson-1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (77.3 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

mrjson-1.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (79.1 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

mrjson-1.4-cp310-cp310-macosx_10_9_x86_64.whl (20.4 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

mrjson-1.4-cp39-cp39-win_amd64.whl (18.1 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

mrjson-1.4-cp39-cp39-win32.whl (17.9 kB view hashes)

Uploaded CPython 3.9 Windows x86

mrjson-1.4-cp39-cp39-musllinux_1_1_x86_64.whl (81.5 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

mrjson-1.4-cp39-cp39-musllinux_1_1_i686.whl (82.7 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

mrjson-1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (76.8 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

mrjson-1.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (78.6 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

mrjson-1.4-cp39-cp39-macosx_10_9_x86_64.whl (20.4 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

mrjson-1.4-cp38-cp38-win_amd64.whl (18.2 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

mrjson-1.4-cp38-cp38-win32.whl (18.1 kB view hashes)

Uploaded CPython 3.8 Windows x86

mrjson-1.4-cp38-cp38-musllinux_1_1_x86_64.whl (81.0 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

mrjson-1.4-cp38-cp38-musllinux_1_1_i686.whl (82.3 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

mrjson-1.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (78.0 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

mrjson-1.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (79.7 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

mrjson-1.4-cp38-cp38-macosx_10_9_x86_64.whl (20.5 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

mrjson-1.4-cp37-cp37m-win_amd64.whl (18.2 kB view hashes)

Uploaded CPython 3.7m Windows x86-64

mrjson-1.4-cp37-cp37m-win32.whl (18.0 kB view hashes)

Uploaded CPython 3.7m Windows x86

mrjson-1.4-cp37-cp37m-musllinux_1_1_x86_64.whl (80.5 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

mrjson-1.4-cp37-cp37m-musllinux_1_1_i686.whl (81.8 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

mrjson-1.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (77.2 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

mrjson-1.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (79.1 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

mrjson-1.4-cp37-cp37m-macosx_10_9_x86_64.whl (20.4 kB view hashes)

Uploaded CPython 3.7m macOS 10.9+ x86-64

mrjson-1.4-cp36-cp36m-win_amd64.whl (18.8 kB view hashes)

Uploaded CPython 3.6m Windows x86-64

mrjson-1.4-cp36-cp36m-win32.whl (18.5 kB view hashes)

Uploaded CPython 3.6m Windows x86

mrjson-1.4-cp36-cp36m-musllinux_1_1_x86_64.whl (82.5 kB view hashes)

Uploaded CPython 3.6m musllinux: musl 1.1+ x86-64

mrjson-1.4-cp36-cp36m-musllinux_1_1_i686.whl (82.4 kB view hashes)

Uploaded CPython 3.6m musllinux: musl 1.1+ i686

mrjson-1.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (76.4 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.17+ x86-64

mrjson-1.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (78.1 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

mrjson-1.4-cp36-cp36m-macosx_10_9_x86_64.whl (20.4 kB view hashes)

Uploaded CPython 3.6m macOS 10.9+ x86-64

Supported by

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