Skip to content
This repository has been archived by the owner on Aug 23, 2022. It is now read-only.

caiyunapp/ultrajson

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

nujson: The UltraJSON Fork That Supports Numpy Serialization

Inspired by Pandas' ujson

Build Status Version Status

How to install

Python versions: Python 2.7, Python 3.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 you get an 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 Python 3, some data types of NumPy are not serializable. Here are some references:

One solution is type conversion like: int(numpy.int64) and numpy.array.tolist(). But it's not good for performance. After searching the Internet, we found an unmaintained project Komnomnomnom/ultrajson which recommends to use Pandas' ujson.

We tried but found Pandas is too heavy for our projects. So we decided to build our own lightweight fork. Currently, esn's ujson master branch has some problems we needed to solve, and the master branch is based on the the v1.35 ujson.

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

About

[deprecated: use ujson or orjson instead] Ultra fast JSON decoder and encoder written in C with Python bindings and NumPy bindings

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C 67.5%
  • Python 32.2%
  • Makefile 0.3%