Binary JData and UBJSON encoder/decoder
Project description
Binary JData for Python - a lightweight binary JSON format
- Copyright: (C) Qianqian Fang (2020-2023) <q.fang at neu.edu>
- Copyright: (C) Iotic Labs Ltd. (2016-2019) <vilnis.termanis at iotic-labs.com>
- License: Apache License, Version 2.0
- Version: 0.4.1
- URL: https://pypi.org/project/bjdata/
- Github: https://github.com/NeuroJSON/pybj
- BJData Spec Version: V1 Draft 2
- Acknowledgement: This project is supported by US National Institute of Health (NIH) grant U24-NS124027
This is a Python v3.2+ (and 2.7+) Binary JData encoder and decoder based on the Draft-2 specification.
Installing / packaging
## To get from PyPI
pip3 install bjdata
Other instalation options
## Installing / packaging
## To get from PyPI without root/administrator privilege
pip3 install bjdata --user
## To get from PyPI via python
python3 -mpip install bjdata
## To only build extension modules in-place (e.g. in repository)
python3 setup.py build_ext -i
## To build & install globally
python3 setup.py install
## To skip building of extensions when installing (or building)
PYBJDATA_NO_EXTENSION=1 python3 setup.py install
This package can be directly installed on Debian Bullseye/Ubuntu 21.04 or newer via
sudo apt-get install python3-bjdata
Both python-bjdata
(for Python 2.7+) and python3-bjdata
(for Python 3.x) can
also be installed on Ubuntu via
sudo add-apt-repository ppa:fangq/ppa
sudo apt-get update
sudo apt-get install python-bjdata python3-bjdata
Notes
- The extension module is not required but provide a significant speed boost.
- The above can also be run with v2.7+ (replacing
pip3
andpython3
above bypip
andpython
, respectively) - At run time, one can check whether compiled version is in use via the
bjdata.EXTENSION_ENABLED
boolean
Usage
It's meant to behave very much like Python's built-in JSON module, e.g.:
import bjdata as bj
obj={'a':123,'b':12.3,'c':[1,2,3,[4,5],'test']}
encoded = bj.dumpb(obj)
decoded = bj.loadb(encoded)
Note: Only unicode strings in Python 2 will be encoded as strings, plain str will be encoded as a byte array.
Documentation
import bjdata as bj
help(bj.dump)
help(bj.load)
help(bj.encoder.dump)
help(bj.decoder.load)
Command-line utility
This converts between JSON and BJData formats:
python3 -mbjdata
USAGE: bjdata (fromjson|tojson) (INFILE|-) [OUTFILE]
EXAMPLES:
python3 -mbjdata fromjson input.json output.bjd
python3 -mbjdata tojson input.bjd output.json
Tests
Static
This library has been checked using flake8 and pylint, using a modified configuration - see pylint.rc and flake8.cfg.
Unit
python3 -mvenv py
. py/bin/activate
pip install -U pip setuptools
pip install -e .[dev]
./coverage_test.sh
Note: See coverage_test.sh
for additional requirements.
Limitations
- The No-Op type is only supported by the decoder. (This should arguably be a protocol-level rather than serialisation-level option.) Specifically, it is only allowed to occur at the start or between elements of a container and only inside un-typed containers. (In a typed container it is impossible to tell the difference between an encoded element and a No-Op.)
- Strongly-typed containers are only supported by the decoder (apart from for bytes/bytearray) and not for No-Op.
- Encoder/decoder extensions are not supported at this time.
- Encoder/decoder only support numpy NDarrays and scalars, other numpy types are not supported.
Acknowledgement
This package was modified based on the py-ubjson package developed by Iotic Labs Ltd. Project URL: https://github.com/Iotic-Labs/py-ubjson
The major changes were focused on supporting the Binary JData Specification Draft 2 - an extended Universal Binary JSON (UBJSON) Specification Draft-12 by adding the below new features:
- BJData adds 4 new numeric data types:
uint16 [u]
,uint32 [m]
,uint64 [M]
andfloat16 [h]
- BJData supports an optimized ND array container
- BJData does not convert NaN/Inf/-Inf to
null
- BJData uses little-Endian as the default integer/floating-point numbers while UBJSON uses big-Endian
- BJData only permits non-zero-fixed-length data types (
UiuImlMLhdDC
) in strongly-typed array/object containers
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file bjdata-0.4.1.tar.gz
.
File metadata
- Download URL: bjdata-0.4.1.tar.gz
- Upload date:
- Size: 65.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0709b02695ae089825ecd38e6f53506ef5957a03a6604a381fc9b7974cd7de61 |
|
MD5 | 81b196d4c8022aa8c9fec97b2fc86204 |
|
BLAKE2b-256 | ff413cb68801d804191c5ad44736ace6f13b8b566498dee29a538cf0fc99186d |