Skip to main content

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 extension module is 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

  • 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

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

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

py-ubjson-0.9.0.tar.gz (43.3 kB view details)

Uploaded Source

File details

Details for the file py-ubjson-0.9.0.tar.gz.

File metadata

  • Download URL: py-ubjson-0.9.0.tar.gz
  • Upload date:
  • Size: 43.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for py-ubjson-0.9.0.tar.gz
Algorithm Hash digest
SHA256 b405daaa82acdf5989207e1e5ff6865ef7d23bf450513a6d90a1ab64c75bdcf8
MD5 c78bbe899eeba9604302ad746094e8d1
BLAKE2b-256 d440a80006884ec03a54a5c6c53ae76df9978536862f0683b6e6280e3808d289

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page