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. 几个ADB常用命令

    http://blog.163.com/ymguan@yeah/blog/static/14007287220133149477594/ 1. 显示当前运行的全部模拟器:    adb devices ...

  2. 10 Things ASP.NET Developers Should Know About Web.config Inheritance and Overrides(转)

    10 Things ASP.NET Developers Should Know About Web.config Inheritance and Overrides Wednesday, Janua ...

  3. 第13篇 PSR-2代码样式

    这个规范原文如下: 1. Overview Code MUST follow a "coding style guide" PSR [PSR-1]. Code MUST use 4 ...

  4. compoer 全局和单个项目切换源 composer update killed

    演示地址: https://blog.csdn.net/hpugym/article/details/72588393 composer update killed https://cloud.ten ...

  5. emqtt 1 (初初初初稿)

    第一篇,先简单分析一下整个emqtt 的大致结构,包括两个部分: 1.message packet 类型 2.message 流向 message packet 类型 P1:mqtt_packet 的 ...

  6. 让Eclipse的TomcatPlugin支持Tomcat 8.x

     使用tomcat插件启动项目的优势: 1.TomcatPlugin是一个免重启的开发插件,原始的Servers方式启动tomcat项目,修改xxx.ftl  或者 xxx.jsp 文件后需要重启to ...

  7. Pycharm快速复制当前行到下一行Ctrl+D

    Pycharm快速复制当前行到下一行Ctrl+D

  8. 3 SpringBoot与微服务

    SpringBoot的使用? 化繁为简: Spring MVC 需要定义各种配置,配置文件多. SpringBoot的核心功能? 独立运行: java -jar XXX.jar (以前启动SPring ...

  9. Android 自定义相机Demo源码

    Github源码:https://github.com/LinJZong/AndroidProject.git 模仿360相机,图片资源来源于360相机,仅供学习使用.使用过程中遇到问题或Bug可发我 ...

  10. Arp内网毒化

    攻击者:192.168.220.143 受害者:192.168.220.137 默认网关:192.168.220.2 首先,开启IP转发 使用工具Arpspoof进行ARP毒化,把受害者的流量传送给网 ...