通用二进制json编解码器
py-ubjson的Python项目详细描述
概述
这是基于draft-12规范的python v3.2+(和2.7+)Universal Binary JSON编码器/解码器。
安装/打包
# 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
注释
- 不需要扩展模块,但可以显著提高速度。
- 以上也可以在v2.7+上运行
- 此模块也可通过Anaconda (conda-forge)
- pypi版本用Iotic Labs Software release signing key 签名
- 在运行时,可以通过ubjson.extension_enabledboolean检查编译版本是否正在使用
用法
它的行为非常像python的内置JSON module,例如:
importubjsonencoded=ubjson.dumpb({u'a':1})decoded=ubjson.loadb(encoded)
note:只有python 2中的unicode字符串将被编码为字符串,普通的str将被编码为字节数组。
文档
importubsjonhelp(ubjson.dump)help(ubjson.load)
命令行实用程序
这将在json和ubjson格式之间进行转换:
python3 -mubjson USAGE: ubjson (fromjson|tojson)(INFILE|-)[OUTFILE]
测试
静态
已经使用flake8和pylint检查了这个库,使用了修改的配置-请参见pylint.rc和flake8.cfg。
单位
python3 -mvenv py . py/bin/activate pip install -U pip setuptools pip install -e .[dev] ./coverage_test.sh
注意:有关其他要求,请参见coverage_test.sh
。
限制
- 只有解码器支持no op类型。(这应该是一个协议级别而不是序列化级别的选项)具体来说,它是only允许出现在容器的开始或元素之间,而only允许出现在非类型容器中。(在类型化容器中,不可能区分编码元素和no-op。)
- 强类型容器仅由解码器支持(除了forbytes/bytearray)而不是no-op。
- 此时不支持编码器/解码器扩展。
为什么?
我在写作时意识到的唯一的实现(simpleubjson)有以下限制:
- 不支持有效的二进制编码
- 仅支持Draft-9
- 只支持单独的python类型,而不支持实现接口的任何类型(例如mapping)
- 不以预期形式解码嵌套数组或对象
- 缺少C扩展速度