msgpack
– msgpack 格式的打包对象¶
msgpack 格式与 json 类似,只是编码的数据是二进制的。有关详细信息,请参阅https://msgpack.org 。该模块实现了 cpython 模块 msgpack-python 的一个子集。
未实现:64 位 int、uint、float。
示例 1:
import msgpack
from io import BytesIO
b = BytesIO()
msgpack.pack({'list': [True, False, None, 1, 3.14], 'str': 'blah'}, b)
b.seek(0)
print(msgpack.unpack(b))
示例 2:处理对象:
from msgpack import pack, unpack, ExtType
from io import BytesIO
class MyClass:
def __init__(self, val):
self.value = val
def __str__(self):
return str(self.value)
data = MyClass(b'my_value')
def encoder(obj):
if isinstance(obj, MyClass):
return ExtType(1, obj.value)
return f"no encoder for {obj}"
def decoder(code, data):
if code == 1:
return MyClass(data)
return f"no decoder for type {code}"
buffer = BytesIO()
pack(data, buffer, default=encoder)
buffer.seek(0)
decoded = unpack(buffer, ext_hook=decoder)
print(f"{data} -> {buffer.getvalue()} -> {decoded}")
在这些板上可用
-
msgpack.
pack
(obj: object, buffer: _typing.WriteableBuffer, *, default: Union[Callable[[object], None], None] = None) → None¶ 输出对象以 msgpack 格式缓冲。
- 参数
obj (object) – 要转换为 msgpack 格式的对象。
buffer (WriteableBuffer) – 要写入的缓冲区
None]] default (Optional[Callable[[object],) – 为没有 msgpack 格式表示的 python 对象调用的函数。
-
msgpack.
unpack
(buffer: _typing.ReadableBuffer, *, ext_hook: Union[Callable[[int, bytes], object], None] = None, use_list: bool = True) → object¶ 从缓冲区解包并返回一个对象。
- 参数
buffer (ReadableBuffer) – 要从中读取的缓冲区
bytes], object]] ext_hook (可选的[Callable[[int,) – 为 msgpack ext 格式的对象调用的函数。
use_list (Optional[bool]) – 以列表或元组形式返回数组 (use_list=False)。
- 返回对象
从缓冲区读取的对象。