第十九天python3 json和messagepack
json的数据类型
官网:https://www.json.org/
值:
双引号内的字符串,数值,true和false,null,对象,数组;
字符串:
双引号内的任意字符的组合,可以有专一字符;
数值:
有正负、整数、浮点数;
对象:
无序的键值对的集合;
格式:{key1:value1,key2:value2,...}
key必须是一个字符串,需要双引号包围起来;
value可以是任意合法的值;
数组:
有序的值的集合
格式:[val1,val2,...]
json模块
python支持少量内建数据类型到json类型的转换;
常用方法
json.dumps() 序列化
json.loads() 反序列化
示例:
import json d = dict(zip('abcde',[None,True,False,[1,'abc'],{'a':1,'b':2}])) s = json.dumps(d) print(s,type(s)) s1 = """{"b":true,"c":false,"d":[1,"abc"],"e":{"b":2,"a":1},"a":null}""" d1 = json.loads(s1) print(d1,type(d1))
# 执行结果 PS D:\Doc> & D:/Python/Python38/python.exe d:/Doc/test.py {"a": null, "b": true, "c": false, "d": [1, "abc"], "e": {"a": 1, "b": 2}} <class 'str'> {'b': True, 'c': False, 'd': [1, 'abc'], 'e': {'b': 2, 'a': 1}, 'a': None} <class 'dict'>
对于json的序列化,是str类型的;一般json编码的数据很少落地,数据都是通过网络传输,传输的时候要考虑压缩它,本质上来说它就是文本,就是字符串;
MessagePack
官网:https://msgpack.org
messagepack是一个基于二进制搞笑的对象序列化类库,可用于跨语言通信;它可以向json那样,在许多语言之间交换结构对象;但它比json更快也更轻巧;支持python、ruby、java等众多语言;
messagepack简单易用,高效压缩,所以用它序列化也是一种很好的选择;
安装
pip install msgpack-python
常用方法
packb 序列化对象;提供了dumps来兼容pickle和json; unpackb 反序列化对象;提供了loads来兼容; pack 序列化对象保存到文件对象;提供了dump来兼容; unpack 反序列化对象保存到文件对象;提供load来兼容;
示例
import json import msgpack d = dict(zip('abcde',[None,True,False,[1,'abc'],{'a':1,'b':2}])) s = json.dumps(d) print(s.encode()) print(len(s),type(s)) print("##############") b1 = msgpack.dumps(d) print(b1) print(len(b1),type(b1))
# 执行结果 PS D:\Doc> & D:/Python/Python38/python.exe d:/Doc/test.py b'{"a": null, "b": true, "c": false, "d": [1, "abc"], "e": {"a": 1, "b": 2}}' 74 <class 'str'> ############## b'\x85\xa1a\xc0\xa1b\xc3\xa1c\xc2\xa1d\x92\x01\xa3abc\xa1e\x82\xa1a\x01\xa1b\x02' 27 <class 'bytes'> #从上面结果可看出,用msgpack序列化后比json序列化后节省好多字节;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!