接口测试基础三-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 接口测试

python基础之继承组合应用对象序列化和反序列化,选课系统综合示例

Java对象的序列化和反序列化

Java零基础学习 Serializable - 序列化和反序列化

python代码实现二叉树的序列化和反序列化