Overview
This is a Python v3.2+ (and 2.7+) Universal Binary JSON encoder/decoder based on the draft-12 specification.
Installing / packaging
# To get from PyPI
pip3 install py-ubjson
# 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)
PYUBJSON_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+
- This module is also available via Anaconda (conda-forge)
- PyPI releases are signed with the Iotic Labs Software release signing key
- At run time, one can check whether compiled version is in use via the ubjson.EXTENSION_ENABLED boolean
Usage
It's meant to behave very much like Python's built-in JSON module, e.g.:
import ubjson
encoded = ubjson.dumpb({u'a': 1})
decoded = ubjson.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 ubsjon
help(ubjson.dump)
help(ubjson.load)
Command-line utility
This converts between JSON and UBJSON formats:
python3 -mubjson
USAGE: ubjson (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.
Why?
The only existing implementation I was aware of at the time of writing (simpleubjson) had the following limitations:
- Does not support efficient binary encoding
- Only supports draft-9
- Only supports individual Python types rather than anything implementing an interface (e.g. Mapping)
- Does not decode nested arrays or objects in expected form
- Lacks C extension speed-up
Metadata
Release files for py-ubjson 0.16.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| py-ubjson-0.16.1.tar.gz | 50.3 kB | Without provenance | Details |
Release files / py-ubjson-0.16.1.tar.gz
| Download URL | py-ubjson-0.16.1.tar.gz |
|---|---|
| Size | 50.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b9bfb8695a1c7e3632e800fb83c943bf67ed45ddd87cd0344851610c69a5a482
|
|
BLAKE2b-256 checksum How to use checksums |
1dc728220d37e041fe1df03e857fe48f768dcd30cd151480bf6f00da8713214a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.8.2
|
Security for py-ubjson 0.16.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.