Skip to main content

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. (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

Notes

  • The extension module is not required but provide a significant speed boost.
  • The above can also be run with v2.7+ (replacing pip3 and python3 above by pip and python, 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] and float16 [h]
  • BJData supports an optimized ND array container
  • BJData does not convert NaN/Inf/-Inf to null

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

bjdata-0.2.5.tar.gz (55.2 kB view details)

Uploaded Source

Built Distributions

bjdata-0.2.5-py3.6-linux-x86_64.egg (140.4 kB view details)

Uploaded Source

bjdata-0.2.5-py2.7-linux-x86_64.egg (93.7 kB view details)

Uploaded Source

File details

Details for the file bjdata-0.2.5.tar.gz.

File metadata

  • Download URL: bjdata-0.2.5.tar.gz
  • Upload date:
  • Size: 55.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.6.9

File hashes

Hashes for bjdata-0.2.5.tar.gz
Algorithm Hash digest
SHA256 d8f3bad56a740bccf82bd53c941e4b121102e4c4db986a4b2a7c28e147576ae7
MD5 f0da58280f2c23df1c49bda4f6dbffe9
BLAKE2b-256 1174a0d004e1354aceb0fc11681df7eca033df74082051f358a92197f3776204

See more details on using hashes here.

File details

Details for the file bjdata-0.2.5-py3.6-linux-x86_64.egg.

File metadata

  • Download URL: bjdata-0.2.5-py3.6-linux-x86_64.egg
  • Upload date:
  • Size: 140.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.6.9

File hashes

Hashes for bjdata-0.2.5-py3.6-linux-x86_64.egg
Algorithm Hash digest
SHA256 fd9e1c8e5acc7579af7a79f147ada36da95d1497aa2e58405e223c5d33dd83ca
MD5 1369164f67f9c69fc24ca5e37f808384
BLAKE2b-256 ba0b2e406fb5f0aa1e8af65d5fcf607d3b14ac69866b90fb6b87853ef028de35

See more details on using hashes here.

File details

Details for the file bjdata-0.2.5-py2.7-linux-x86_64.egg.

File metadata

  • Download URL: bjdata-0.2.5-py2.7-linux-x86_64.egg
  • Upload date:
  • Size: 93.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.6.9

File hashes

Hashes for bjdata-0.2.5-py2.7-linux-x86_64.egg
Algorithm Hash digest
SHA256 9c6efad87e8dc482a6a151cb6c9fbb9570b9ae95f530b831f867426b079d6c8c
MD5 1c12287d3074f1b31690f3cb410236f2
BLAKE2b-256 384048267fbc6a3b8d4114bbf83f84f057fec68064ea8c1d9f31a3707d2cf8d9

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