SkillAgentSearch skills...

Mrjson

JSON encoder and decoder for python written in C/C++

Install / Use

/learn @MarkReedZ/Mrjson
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

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.

<img src="bench/png/str128-2.png" width="40%" />

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

<img src="bench/png/canada-loads.png" width="40%" />

A single tweet from twitter - twit.json

<img src="bench/png/twit-loads.png" width="40%" />

citm_catalog.json from The Native JSON Benchmark

<img src="bench/png/citm-catalog-loads.png" width="40%" />

Dumps

Only 128 byte long strings.

<img src="bench/png/str128-dumps.png" width="40%" />

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

<img src="bench/png/canada-dumps.png" width="40%" />

A single tweet from twitter - twit.json

<img src="bench/png/twit-dumps.png" width="40%" />

citm_catalog.json from The Native JSON Benchmark

<img src="bench/png/citm-catalog-dumps.png" width="40%" />

Related Skills

View on GitHub
GitHub Stars10
CategoryDevelopment
Updated3mo ago
Forks1

Languages

C

Security Score

72/100

Audited on Dec 31, 2025

No findings