python----序列化与反序列化(json库)
json数据来源
- 第三方数据源提供的json数据
- 通过爬虫爬取回来的json格式的网站数据
json数据格式的特点
- 对象通过键值对表现
- 键通过双引号包裹,后面跟“:”,后面跟该键的值
- 值可以是字符串、数字、数组等数据类型
- 对象与对象之间用逗号隔开
- “{}”表达对象
- “[]”表达数组
json库的所有方法及其帮助文档:
1 import json 2 3 # 查看模块的使用方法有哪些dir() 4 print(dir(json)) 5 # 查看模块的帮助说明文档help() 6 print(type(help(json)))
json库的主要方法:
1 #coding:utf-8 2 import json 3 4 print(json.__all__)
运行结果
序列化:将Python的数据对象编码为json格式的字符串,使用json.dumps()方法。
反序列化:将json格式的字符串解码为Python的数据对象,使用json.loads()方法。
1 #coding:utf-8 2 import json 3 4 dict_data = { 5 "name" : "gm", 6 "age" : 29, 7 "work" : "IT", 8 "address" : "SZ" 9 } 10 print("未序列化前的数据:", dict_data) 11 print("未序列化前的数据类型:", type(dict_data)) 12 print("将dict_data进行编码") 13 dump_data = json.dumps(dict_data) 14 print("序列化后的数据:", dump_data) 15 print("序列化后的数据类型:", type(dump_data)) 16 print("将dump_data进行解码") 17 load_data = json.loads(dump_data) 18 print("反序列化后的数据:", load_data) 19 print("反序列化后的数据类型:", type(load_data))
运行结果
1 #coding:utf-8 2 import json 3 4 list = ["gm", 29, "IT", "SZ"] 5 print("列表序列化与反序列化:") 6 print("原始数据类型:", type(list)) 7 print("原始数据:", list) 8 list1 = json.dumps(list) 9 print("序列化后的数据类型:", type(list1)) 10 print("序列化后的数据:", list1) 11 list2 = json.loads(list1) 12 print("反序列化后的数据类型:", type(list2)) 13 print("反序列化后的数据:", list2) 14 15 tuple = ("gm", 29, "IT", "SZ") 16 print("元组序列化与反序列化:") 17 print("原始数据类型:", type(tuple)) 18 print("原始数据:", tuple) 19 tuple1 = json.dumps(tuple) 20 print("序列化后的数据类型:", type(tuple1)) 21 print("序列化后的数据:", tuple1) 22 tuple2 = json.loads(tuple1) 23 print("反序列化后的数据类型:", type(tuple2)) 24 print("反序列化后的数据:", tuple2) 25 26 dict = { 27 "name": "gm", 28 "age": 29, 29 "work": "IT", 30 "address": "SZ" 31 } 32 print("字典序列化与反序列化:") 33 print("原始数据类型:", type(dict)) 34 print("原始数据:", dict) 35 dict1 = json.dumps(dict) 36 print("序列化后的数据类型:", type(dict1)) 37 print("序列化后的数据:", dict1) 38 dict2 = json.loads(dict1) 39 print("反序列化后的数据类型:", type(dict2)) 40 print("反序列化后的数据:", dict2)
运行结果
应用实例:
1 #coding:utf-8 2 import json 3 import requests 4 r = requests.get('http://wthrcdn.etouch.cn/weather_mini?city=深圳') 5 print("数据类型:", type(r.text)) 6 print(r.text) 7 print("对数据进行反序列化操作,即解码") 8 data = json.loads(r.text) 9 print("反序列化后的数据类型:", type(data)) 10 print("反序列化后的数据", data) 11 print("对数据不进行反序列化操作") 12 print(type(r.json())) 13 print(r.json())
运行结果
在接口自动化测试中,客户端发送request请求到服务端,服务端响应response数据给客户端,客户端拿到响应数据后存储到文件中。故在文件的处理中:
序列化过程:即把数据存储到文件的过程,使用json.dump()方法。
反序列号过程:即读取文件里面的内容过程,使用json.load()方法。
1 #coding:utf-8 2 import json 3 4 dict_data = { 5 "name": "gm", 6 "age": 29, 7 "work": "IT", 8 "address": "SZ" 9 } 10 print("将dict_data数据先序列化再写入文件") 11 json.dump(dict_data, open("gm.txt", "w"), indent=3, sort_keys=True) 12 print("读取文件内容为:") 13 r = open("gm.txt", "r+") 14 print(r.read()) 15 print("再反序列化") 16 load_data = json.load(open("gm.txt", "r+")) 17 print("数据内容:", load_data, "数据类型:", type(load_data))
运行结果