Skip to main content

Encoding and decoding Python data structrues using portable JData-annotated formats

Project description

JData for Python - lightweight and serializable data annotations for Python

Build Status

The JData Specification defines a lightweight language-independent data annotation interface targetted at storing and sharing complex data structures across different programming languages such as MATLAB, JavaScript, Python etc. Using JData formats, a complex Python data structure can be encoded as a dict object that is easily serialized as a JSON/binary JSON file and share such data between programs of different languages.

How to install

This package can also be installed on Ubuntu 21.04 or Debian Bullseye via

sudo apt-get install python3-jdata

On older Ubuntu or Debian releases, you may install jdata via the below PPA:

sudo add-apt-repository ppa:fangq/ppa
sudo apt-get update
sudo apt-get install python3-jdata

Dependencies:

  • numpy: PIP: run pip install numpy or sudo apt-get install python3-numpy
  • (optional) bjdata: PIP: run pip install bjdata or sudo apt-get install python3-bjdata, see https://pypi.org/project/bjdata/, only needed to read/write BJData/UBJSON files
  • (optional) lz4: PIP: run pip install lz4, only needed when encoding/decoding lz4-compressed data
  • (optional) backports.lzma: PIP: run sudo apt-get install liblzma-dev and pip install backports.lzma (needed for Python 2.7), only needed when encoding/decoding lzma-compressed data

Replacing pip by pip3 if you are using Python 3.x. If either pip or pip3 does not exist on your system, please run

    sudo apt-get install python3-pip

Please note that in some OS releases (such as Ubuntu 20.04), python2.x and python-pip are no longer supported.

One can also install this module from the source code. To do this, you first check out a copy of the latest code from Github by

    git clone https://github.com/NeuroJSON/pyjdata.git
    cd pyjdata

then install the module to your local user folder by

    python3 setup.py install --user

or, if you prefer, install to the system folder for all users by

    sudo python3 setup.py install

Please replace python by python3 if you want to install it for Python 3.x instead of 2.x.

Instead of installing the module, you can also import the jdata module directly from your local copy by cd the root folder of the unzipped pyjdata package, and run

   import jdata as jd

How to use

The PyJData module is easy to use. You can use the encode()/decode() functions to encode Python data into JData annotation format, or decode JData structures into native Python data, for example

import jdata as jd
import numpy as np

a={'str':'test','num':1.2,'list':[1.1,[2.1]],'nan':float('nan'),'np':np.arange(1,5,dtype=np.uint8)}
jd.encode(a)
jd.decode(jd.encode(a))
d1=jd.encode(a,{'compression':'zlib','base64':1})
d1
jd.decode(d1,{'base64':1})

One can further save the JData annotated data into JSON or binary JSON (UBJSON) files using the jdata.save function, or loading JData-formatted data to Python using jdata.load

import jdata as jd
import numpy as np

a={'str':'test','num':1.2,'list':[1.1,[2.1]],'nan':float('nan'),'np':np.arange(1,5,dtype=np.uint8)}
jd.save(a,'test.json')
newdata=jd.load('test.json')
newdata

Utility

One can convert from JSON based data files (.json, .jdt, .jnii, .jmsh, .jnirs) to binary-JData based binary files (.bjd, .jdb, .bnii, .bmsh, .bnirs) and vice versa using command

python3 -mjdata /path/to/text/json/file.json # convert to /path/to/text/json/file.jdb
python3 -mjdata /path/to/text/json/file.jdb  # convert to /path/to/text/json/file.json
python3 -mjdata -h                           # show help info

Test

To see additional data type support, please run the built-in test using below command

python3 -m unittest discover -v test

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

jdata-0.4.4.tar.gz (14.6 kB view details)

Uploaded Source

Built Distribution

jdata-0.4.4-py2.py3-none-any.whl (13.2 kB view details)

Uploaded Python 2Python 3

File details

Details for the file jdata-0.4.4.tar.gz.

File metadata

  • Download URL: jdata-0.4.4.tar.gz
  • Upload date:
  • Size: 14.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.8.10

File hashes

Hashes for jdata-0.4.4.tar.gz
Algorithm Hash digest
SHA256 5a5554071015c14a2082eb7a4340049e8aac10a69238a95946668c1f0a0d0912
MD5 db092adc202dfd497d971f869c1e6a32
BLAKE2b-256 32843828f728430efdf6cffa72c6a68c838774616dec5fdfd28cb0efd02d701c

See more details on using hashes here.

File details

Details for the file jdata-0.4.4-py2.py3-none-any.whl.

File metadata

  • Download URL: jdata-0.4.4-py2.py3-none-any.whl
  • Upload date:
  • Size: 13.2 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.8.10

File hashes

Hashes for jdata-0.4.4-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 4792121d5bc6314a9231459d3f05d4a963e0e7f4dee614dd9ab41b7241654211
MD5 ec09d2ccea51dd350a3e09ccb6263f59
BLAKE2b-256 762cb444e94fb9dec4b8ce5e970e7d95b71d9825e8300f66f7032e4f0add209c

See more details on using hashes here.

Supported by

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