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":"","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":""},"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': '', 'wendu': '', 'yesterday': {'date': '18日星期日', 'high': '高温 23℃', 'low': '低温 17℃', 'fl': '<![CDATA[<3级]]>', 'type': '多云', 'fx': '无持续风向'}, 'city': '深圳'}} 数据类型: <class 'dict'>

Requests接口测试(四)的更多相关文章

  1. requests接口测试-requests的安装

    requests接口测试-requests的安装 安装常见问题 提示连接不上,443问题 一般是因为浏览器设置了代理,关闭代理. 网络加载慢,设置国内镜像地址 1.pip安装 2.pycharm安装 ...

  2. Python+Requests接口测试教程(1):Fiddler抓包工具

    本书涵盖内容:fiddler.http协议.json.requests+unittest+报告.bs4.数据相关(mysql/oracle/logging)等内容.刚买须知:本书是针对零基础入门接口测 ...

  3. Python+Requests接口测试教程(2):

    开讲前,告诉大家requests有他自己的官方文档:http://cn.python-requests.org/zh_CN/latest/ 2.1 发get请求 前言requests模块,也就是老污龟 ...

  4. Python+Requests接口测试教程(2):requests

    开讲前,告诉大家requests有他自己的官方文档:http://cn.python-requests.org/zh_CN/latest/ 2.1 发get请求 前言requests模块,也就是老污龟 ...

  5. Requests接口测试-对cookies的操作处理(一)

    大家都对cookie都不陌生,我们本篇文章使用requests结合cookie进行实例演示.我们使用一个接口项目地址,因为接口项目涉及到隐私问题,所以这里接口的地址我暂时不会给大家开放,但是我会给大家 ...

  6. unittest,requests——接口测试脚本及报告

    用unittest管理两个利用requests模块,做百度搜索的简单接口测试用例,之后自动输出报告 # encoding=utf-8import requests,unittest,HTMLTestR ...

  7. Requests接口测试-对cookies的操作处理(二)

    我们继续来讨论一下cookie这方面的内容,我们都知道cookie是数据,一般的话在我接口测试中,数据都是要和代码进行分离的.本篇内容,我们队cookie内容进行处理,我们把登陆成功后的cookie写 ...

  8. Requests接口测试(五)

    使用python+requests编写接口测试用例 好了,有了前几章的的基础,写下来我把前面的基础整合一下,来一个实际的接口测试练习吧. 接口测试流程 1.拿到接口的URL地址 2.查看接口是用什么方 ...

  9. Requests接口测试(一)

    接口测试概念 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点.测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关 ...

随机推荐

  1. yii 操作cookie

    原文地址:http://blog.sina.com.cn/s/blog_664c9f650100yqkn.html 设置cookie: $cookie = new CHttpCookie('mycoo ...

  2. 系列文章--WCF后传学习文章

    WCF后传系列(10):消息处理功能核心 摘要: WCF是一个通信框架,同时也可以将它看成是一个消息处理或者传递的基础框架,它可以接收消息.对消息做处理,或者根据客户端给定的数据构造消息并将消息发送到 ...

  3. MySQL-5.7中InnoDB表数据文件存储位置

    学习地址:https://www.cnblogs.com/tongxiaoda/p/7874535.html

  4. Linux安装python

    1.打开终端,输入:wget https://www.python.org/ftp/python/3.5.0/Python-3.5.0b4.tgz下载完毕后 2.输入解压命令:tar –zxvf Py ...

  5. Oracle 12.1.0.2 对JSON的支持

    Oracle 12.1.0.2版本有一个新功能就是可以存储.查询.索引JSON数据格式,而且也实现了使用SQL语句来解析JSON,非常方便.JSON数据在数据库中以VARCHAR2, CLOB或者BL ...

  6. Oracle 常见hint

    Hints 应该慎用,收集相关表的统计信息,根据执行计划,来改变查询方式 只能在SELECT, UPDATE, INSERT, MERGE, or DELETE 关键字后面,只有insert可以用2个 ...

  7. 23 mysql怎么保证数据不丢失?

    MySQL的wal机制,得到的结论是:只要redo log和binlog 持久化到磁盘,就能确保mysql异常重新启动后,数据是可以恢复的. binlog的写入机制 其实,binlog的写入逻辑比较简 ...

  8. zabbix 在linux上安装以及一些配置

    本文章将演示zabbix 3.2版本的安装,供有需要的伙伴们参考: 网络也有很多关于zabbix的安装文档,甚至每一步的配置都有详细的截图,我这里就不演示截图了,多配置几次自然就熟练了.多折腾. 楼主 ...

  9. Models-详细操作

    # 单表简单查询13种方法 1.all(): 查询所有结果 all: models.表名.objects.all() book_all=models.Book.objects.all() # 结果是q ...

  10. Git 常用命令速查手册

    来源:https://www.jianshu.com/p/5ee9897b6b65 1.初始化仓库 git init 2.将文件添加到仓库 git add 文件名 # 将工作区的某个文件添加到暂存区 ...