GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - NeuroJSON/pybj: Binary JSON (BJData/UBJSON) Support for Python

BranchesTags
Open more actions menu
 
 

Latest commit

 

History

175 Commits
175 Commits

Folders and files

NameName
Last commit message
Last commit date
.github
.github
 
 
bjdata
bjdata
 
 
src
src
 
 
test
test
 
 
.gitignore
.gitignore
 
 
.travis.yml
.travis.yml
 
 
Binary_JData_Specification.md
Binary_JData_Specification.md
 
 
CHANGELOG
CHANGELOG
 
 
CONTRIBUTING.md
CONTRIBUTING.md
 
 
LICENSE
LICENSE
 
 
MANIFEST.in
MANIFEST.in
 
 
Makefile
Makefile
 
 
NOTICE
NOTICE
 
 
README.md
README.md
 
 
UBJSON-Specification.md
UBJSON-Specification.md
 
 
coverage_test.sh
coverage_test.sh
 
 
ez_setup.py
ez_setup.py
 
 
flake8.cfg
flake8.cfg
 
 
pylint.rc
pylint.rc
 
 
pyproject.toml
pyproject.toml
 
 
setup.py
setup.py
 
 

Repository files navigation

Binary JData for Python - a lightweight binary JSON format

  • Copyright: (C) Qianqian Fang (2020-2026) <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.6.6
  • URL: https://pypi.org/project/bjdata/
  • Github: https://github.com/NeuroJSON/pybj
  • BJData Spec Version: Draft 4
  • Acknowledgement: This project is supported by US National Institute of Health (NIH) grant U24-NS124027

Build Status

This is a Python v3.2+ (and 2.7+) Binary JData encoder and decoder based on the Draft-4 specification.

Installing / packaging

## To get from PyPI
pip3 install bjdata

Other instalation options

## Installing / packaging

## To get from PyPI without root/administrator privilege
pip3 install bjdata --user

## To get from PyPI via python
python3 -mpip install bjdata

## To only build extension modules in-place (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 be directly installed on Debian Bullseye/Ubuntu 21.04 or newer via

sudo apt-get install python3-bjdata

Both python-bjdata (for Python 2.7+) and python3-bjdata (for Python 3.x) can also be installed on Ubuntu 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 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

obj={'a':123,'b':12.3,'c':[1,2,3,[4,5],'test']}
encoded = bj.dumpb(obj)
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 as bj
help(bj.dump)
help(bj.load)
help(bj.encoder.dump)
help(bj.decoder.load)

Command-line utility

This converts between JSON and BJData formats:

python3 -mbjdata
USAGE: bjdata (fromjson|tojson) (INFILE|-) [OUTFILE]

EXAMPLES:

python3 -mbjdata fromjson input.json output.bjd
python3 -mbjdata tojson   input.bjd  output.json

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.
  • Encoder/decoder only support numpy NDarrays and scalars, other numpy types are not supported.

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 4 - an extended Universal Binary JSON (UBJSON) Specification Draft-12 by adding the below new features:

  • BJData adds 5 new data types: uint16 [u], uint32 [m], uint64 [M], float16 [h], and byte [B]
  • BJData adds a dedicated byte data type used in optimized array containers for binary data
  • BJData supports an optimized ND array container
  • BJData does not convert NaN/Inf/-Inf to null
  • BJData uses little-Endian as the default integer/floating-point numbers while UBJSON uses big-Endian
  • BJData only permits non-zero-fixed-length data types (UiuImlMLhdDCB) in strongly-typed array/object containers
  • BJData Draft-4 adds new optimized container Stucture-of-Arrays (SoA) for packed objects.

About

Binary JSON (BJData/UBJSON) Support for Python

neurojson.org

Topics

decoderencoderfile-formatjsonneuroimagingstream

Resources

Readme
Apache-2.0 license

Code of conduct

Code of conduct

Contributing

Contributing
Activity
Custom properties

Stars

2 stars

Watchers

0 watching

Forks

3 forks
Report repository

Releases

Packages

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.