MessagePack是一种高效的二进制序列化格式。它允许您像JSON一样在多个语言之间交换数据。但是,它更快并且更小。小整数被编码为一个字节,和典型的短字符串只需要除了字符串本身的一个额外字节。
在使用 Python 做 Redis 开发时,发现 Python 自带的序列化都不太好用,对于复杂的数据结构的处理都不到位,经过领导推荐,开始使用 MessagePack 进行序列化编程。它是一个跨语言工具,支持十几种语言,在传输数据上号称比 JSON 更小更快。
本文以 Python 为例简单介绍
下载
1 | $ pip install msgpack-python |
Hello World
MessagePack 的序列化方法很简单 packb()
,反序列 unpackb()
1 | In [1]: import msgpack |
反序列后输出结果依然是字节数组类型,这不是我们想要的,想要得到字符串类型,我们需要用到 encoding
参数
1 | In [4]: msgpack.unpackb(msgpack.packb('Hello World'), encoding='utf-8') |
JSON
1 | In [10]: msgpack.unpackb(msgpack.packb({"name": "wxnacy"}), encoding='utf-8') |
简单的 JSON 数据直接使用即可,但是如果 JSON 中的数据类型比较特殊,比如 datetime
就会有点麻烦
1 | #!/usr/bin/env python |
1 | TypeError: can't serialize datetime.datetime(2017, 12, 25, 21, 26, 48, 277551) |
如上,直接进行序列化会报错,此时需要教给它怎么处理这种类型
1 | #!/usr/bin/env python |
通过 default
和 object_hook
分别制定序列和反序列的解析方法,通过上边这个例子,我们照葫芦画瓢把其他它不能识别的类都解析出来。
最近热读
扫码关注公众号,或搜索公众号“温欣爸比”
及时获取我的最新文章
