接口测试基础三-Python序列化和反序列化
Posted 测试老兵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接口测试基础三-Python序列化和反序列化相关的知识,希望对你有一定的参考价值。
Python序列化和反序列化
啥是序列化?啥是反序列化?这两个词听起来优点高大上的意思,其实呢不然,很简单的可以理解为:
- 序列化:将python的数据对象编码转换为json格式的字符串
- 反序列化:将json格式的字符串解码为python的数据对象
在python中提供了json库,我们将json导入,查看json库下面有哪些方法:
>>> import json
>>> print (json.__all__)
[\'dump\', \'dumps\', \'load\', \'loads\', \'JSONDecoder\', \'JSONEncoder\']
>>>
我们通过上面的例子可以知道json库里面常用的方法有
[\'dump\', \'dumps\', \'load\', \'loads\', \'JSONDecoder\', \'JSONEncoder\']
有的小伙伴可能不知道什么是json这里有个传送门去了解下哈:https://baike.baidu.com/item/JSON/2462549?fr=aladdin
ok,那么我们接下来进行序列化的代码演示,通过json进行序列化json格式字符串,请看下面的代码:
import json
dict1={\'name\':"fighter",
\'age\':28,
\'address\':\'shenzhen\'}
print (\'未序列化前的数据类型为:\',type(dict1))
print (\'未序列化前的数据:\',dict1)
str1 = json.dumps(dict1) #将python数据对象序列化操作变成字符串
print (\'序列化后的数据类型为:\',type(str1))
print (\'序列化后的数据为:\',str1)
输出结果:
C:\\Python34\\python3.exe E:/Project_case/demo1.py
未序列化前的数据类型为: <class \'dict\'> #-----------字典类型
未序列化前的数据: {\'address\': \'shenzhen\', \'name\': \'fighter\', \'age\': 28}
序列化后的数据类型为: <class \'str\'> #-----------字符串类型
序列化后的数据为: {"address": "shenzhen", "name": "fighter", "age": 28}
然后我们在将序列化后得到的结果反序列化操作:
import json #导入json库
#定义字典
dict1={\'name\':"fighter",
\'age\':28,
\'address\':\'shenzhen\'}
print (\'未序列化前的数据类型为:\',type(dict1))
print (\'未序列化前的数据:\',dict1)
#对python对象进行序列化操作
print (\'begin对python对象进行序列化操作------------>\')
str1 = json.dumps(dict1)
print (\'序列化后的数据类型为:\',type(str1))
print (\'序列化后的数据为:\',str1)
#对str1进行反序列化操作
print (\'begin对str1对象进行反序列化操作------------>\')
dict2 = json.loads(str1)
print (\'反序列化后的数据类型:\',type(dict2))
print (\'反序列化后的数据:\',dict2)
输出结果:
C:\\Python34\\python3.exe E:/Project_case/demo1.py
未序列化前的数据类型为: <class \'dict\'>
未序列化前的数据: {\'name\': \'fighter\', \'age\': 28, \'address\': \'shenzhen\'}
begin对python对象进行序列化操作------------>
序列化后的数据类型为: <class \'str\'>
序列化后的数据为: {"name": "fighter", "age": 28, "address": "shenzhen"}
begin对str1对象进行反序列化操作------------>
反序列化后的数据类型: <class \'dict\'>
反序列化后的数据: {\'name\': \'fighter\', \'age\': 28, \'address\': \'shenzhen\'}
最后,我们在结合requests库,来查看一下json数据,具体代码如下:
import json,requests #导入json库/requests库
r = requests.get(\'http://wthrcdn.etouch.cn/weather_mini?city=深圳\')
print (r.text,\'数据类型:\',type(r.text))
#对数据进行反序列化操作
dic = json.loads(r.text)
print (dic,\'数据类型:\',type(dic))
查看反序列化前,正常响应结果:
{"data":{"yesterday":{"date":"18日星期日","high":"高温 23℃","fx":"无持续风向","low":"低温 17℃","fl":"<![CDATA[<3级]]>","type":"多云"},"city":"深圳","aqi":"39","forecast":[{"date":"19日星期一","high":"高温 25℃","fengli":"<![CDATA[<3级]]>","low":"低温 18℃","fengxiang":"无持续风向","type":"阵雨"},{"date":"20日星期二","high":"高温 26℃","fengli":"<![CDATA[<3级]]>","low":"低温 17℃","fengxiang":"无持续风向","type":"多云"},{"date":"21日星期三","high":"高温 21℃","fengli":"<![CDATA[3-4级]]>","low":"低温 14℃","fengxiang":"东风","type":"小雨"},{"date":"22日星期四","high":"高温 17℃","fengli":"<![CDATA[3-4级]]>","low":"低温 13℃","fengxiang":"东风","type":"小雨"},{"date":"23日星期五","high":"高温 19℃","fengli":"<![CDATA[<3级]]>","low":"低温 13℃","fengxiang":"无持续风向","type":"阴"}],"ganmao":"天气转凉,空气湿度较大,较易发生感冒,体质较弱的朋友请注意适当防护。","wendu":"23"},"status":1000,"desc":"OK"} 数据类型: <class \'str\'>
反序列化后输出的结果:
{\'status\': 1000, \'desc\': \'OK\', \'data\': {\'forecast\': [{\'date\': \'19日星期一\', \'high\': \'高温 25℃\', \'low\': \'低温 18℃\', \'fengxiang\': \'无持续风向\', \'type\': \'阵雨\', \'fengli\': \'<![CDATA[<3级]]>\'}, {\'date\': \'20日星期二\', \'high\': \'高温 26℃\', \'low\': \'低温 17℃\', \'fengxiang\': \'无持续风向\', \'type\': \'多云\', \'fengli\': \'<![CDATA[<3级]]>\'}, {\'date\': \'21日星期三\', \'high\': \'高温 21℃\', \'low\': \'低温 14℃\', \'fengxiang\': \'东风\', \'type\': \'小雨\', \'fengli\': \'<![CDATA[3-4级]]>\'}, {\'date\': \'22日星期四\', \'high\': \'高温 17℃\', \'low\': \'低温 13℃\', \'fengxiang\': \'东风\', \'type\': \'小雨\', \'fengli\': \'<![CDATA[3-4级]]>\'}, {\'date\': \'23日星期五\', \'high\': \'高温 19℃\', \'low\': \'低温 13℃\', \'fengxiang\': \'无持续风向\', \'type\': \'阴\', \'fengli\': \'<![CDATA[<3级]]>\'}], \'ganmao\': \'天气转凉,空气湿度较大,较易发生感冒,体质较弱的朋友请注意适当防护。\', \'aqi\': \'39\', \'wendu\': \'23\', \'yesterday\': {\'date\': \'18日星期日\', \'high\': \'高温 23℃\', \'low\': \'低温 17℃\', \'fl\': \'<![CDATA[<3级]]>\', \'type\': \'多云\', \'fx\': \'无持续风向\'}, \'city\': \'深圳\'}} 数据类型: <class \'dict\'>
以上是关于接口测试基础三-Python序列化和反序列化的主要内容,如果未能解决你的问题,请参考以下文章
Python基础 -- 函数局部变量和全局变量文件(包含序列化和反序列化)异常
python基础之继承组合应用对象序列化和反序列化,选课系统综合示例