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))

运行结果

 

 

 

posted @ 2020-07-21 10:49  给自己一个改变的理由  阅读(346)  评论(0编辑  收藏  举报