zoukankan      html  css  js  c++  java
  • Requests接口测试(四)

    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:Python34python3.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:Python34python3.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'>
  • 相关阅读:
    矩阵遍历 局部处理 661. 图片平滑器
    最小堆make_heap(), pop_heap()和push_heap()
    vector<pair<int, int>>或者有序map
    简单的滑动窗口 643. 子数组最大平均数 I
    js中getYear()和getFullYear()的区别
    异常:No WebApplicationContext found: no ContextLoaderListener registered?
    异常:Duplicate key or integrity constraint violation message from server: "Duplicate entry '0' for key 1"
    异常:the type net.sf.hibernate.lockmode cannot be resolved, it is indirectly referenced from required .class files
    使用cxf写web service的简单实例
    struts1多文件上传、下载实例
  • 原文地址:https://www.cnblogs.com/fighter007/p/8454266.html
Copyright © 2011-2022 走看看