Binary JData and UBJSON encoder/decoder
Project description
Binary JData for Python - a lightweight binary JSON format
- Copyright: (C) Qianqian Fang (2020) <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.2
- URL: https://github.com/fangq/pybj
This is a Python v3.2+ (and 2.7+) Binary JData based on the Draft-1 specification.
Installing / packaging
## To get from PyPI
pip3 install bjdata
## To only build extension modules inline (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 also be installed on Ubuntu (Debian package is currently under review) 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
encoded = bj.dumpb({u'a': 1})
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
help(bjdata.dump)
help(bjdata.load)
Command-line utility
This converts between JSON and BJData formats:
python3 -mbjdata
USAGE: bjdata (fromjson|tojson) (INFILE|-) [OUTFILE]
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.
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 1 - 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
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
Built Distributions
Hashes for bjdata-0.2.8-py3.5-linux-x86_64.egg
Algorithm | Hash digest | |
---|---|---|
SHA256 | cdeca11482e7e3cbd4e79e3961af63774404cb88dfe25f313b68d6cabc0ba9ad |
|
MD5 | 98d9e26fa246c45f587a3f931844f03b |
|
BLAKE2b-256 | 1aad25ddbd63b0c4478429583fea76f32ea01c6b611b6ed9bf2097802d93fc4f |
Hashes for bjdata-0.2.8-py2.7-linux-x86_64.egg
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9f49b7c95cd0f1f4aa57c7bb9231f5a89726256b40ec605eab395f3376c1c828 |
|
MD5 | 2bab93d015ba916ed4efb1e8bd6f4bf5 |
|
BLAKE2b-256 | 5ee7ca471d2b20f019215c7c1b32e4f07f9ae923d5b869e5fef2b12107793963 |