Skip to main content

Ultra fast JSON encoder and decoder for Python with NumPy support

Project description

nujson: The UltraJSON Fork That Support Numpy Serialization

Inspired by Pandas' ujson

Build Status Version Status

How to install

Python version: Python2.7, Python3.5+

Using pip:

pip install nujson

Clone and install:

# git clone
git clone https://github.com/caiyunapp/ultrajson

# Don't use `python setup.py install`
# NumPy will install automatically
pip install -e .

If get error like this:

ERROR: Could not find a version that satisfies the requirement numpy>=1.16.4 (from nujson) (from versions: 1.9.3)
ERROR: No matching distribution found for numpy>=1.16.4 (from nujson)

Try this:

pip uninstall numpy
pip install numpy==1.16.4
pip install nujson

Example

>>> import numpy as np
>>> import nujson as ujson
>>> a = {"a": np.int64(100)}
>>> ujson.dumps(a)
'{"a":100}'
>>> a["b"] = np.float64(10.9)
>>> ujson.dumps(a)
'{"a":100,"b":10.9}'
>>> a["c"] = np.str_("12")
>>> ujson.dumps(a)
'{"a":100,"b":10.9,"c":"12"}'
>>> a["d"] = np.array(list(range(10)))
>>> ujson.dumps(a)
'{"a":100,"b":10.9,"c":"12","d":[0,1,2,3,4,5,6,7,8,9]}'
>>> a["e"] = np.repeat(3.9, 4)
>>> ujson.dumps(a)
'{"a":100,"b":10.9,"c":"12","d":[0,1,2,3,4,5,6,7,8,9],"e":[3.9,3.9,3.9,3.9]}'

Why make such a package and what is modified

On Python3, some data types of NumPy is not serializable. Here is some references we searched:

One solution is type conversion like: int(numpy.int64) and numpy.array.tolist(). But it's not good for performance. After searching Internet, find a no longer maintained project Komnomnomnom/ultrajson recommond to use Pandas' ujson.

We tried but found Pandas is to heavy for our projects. So we decide to build our own light weight fork. Currentltly, the esn's ujson master branch has some problems we need to solve, and the master branch is based on the the v1.35 ujson.

The main point is convert NumPy data type in C, with calling NumPy's header. Commit 187bd15 has the most changes we made to support NumPy, and Commit afedc42 fix a build issue on macOS caused by Clang.

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

nujson-1.35.2.tar.gz (187.2 kB view details)

Uploaded Source

File details

Details for the file nujson-1.35.2.tar.gz.

File metadata

  • Download URL: nujson-1.35.2.tar.gz
  • Upload date:
  • Size: 187.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.40.2 CPython/3.7.5

File hashes

Hashes for nujson-1.35.2.tar.gz
Algorithm Hash digest
SHA256 2b231051b6e983d38e9fc4801841a60cd91e6266505f616d32046e54e92e7032
MD5 391d2cc863a3f1c96d5a9895650991c7
BLAKE2b-256 4176440ee0166cdb6674fe744f96498cdce6bac7cae0a543b84f19dfa1704fc4

See more details on using hashes here.

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