Universal Binary JSON encoder/decoder
Project description
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 (cython-generated) extension modules are not required but provide a significant speed boost.
The above can also be run with v2.7+
PyPI releases are signed with the Iotic Labs Software release signing key
If any .py or .pxd has been modified, cythongenerate.sh_ has to be run first
At run time, one can check whether compiled version is in use via the ubjson.EXTENSIONENABLED_ 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
./coverage_test.sh
Note: This requires coverage.
Limitations
The No-Op type is not supported. (This should arguably be a protocol-level rather than serialisation-level option.)
Strongly-typed containers are only supported by the decoder (apart from for bytes/bytearray).
Encoder/decoder extensions are not supported at this time.
cython optimizations could be improved.
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
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 py-ubjson-0.8.5.tar.gz
.
File metadata
- Download URL: py-ubjson-0.8.5.tar.gz
- Upload date:
- Size: 318.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e58e99753aaff3ed5d884989a6236bd98a4b0dfdb0e62f9753c20f485691fa9e |
|
MD5 | 09584b02508451a8133095c3b5f2bf41 |
|
BLAKE2b-256 | 9912173cd417cacdacd158f947365bb17952a93b4e9d08f8a2f4b77d6c17cb4e |