JSON序列和反序列1
python3 JSON
1.Python3 使用 json 模块来对 JSON 数据进行编解码。
a.json.dumps():编码,将 python类型 序列为 json字符串类型。
b.json.loads():解码,将 json类型 反序列为 python类型。
c.json.dump() : 编码,操作文件,序列化
d.json.load() :解码,操作文件,反序列
2.python类型和json类型之间的序列和反序列
import json
#列表list序列化为json
list = ['a','b','c','d','e']
data = json.dumps(list)
print("python:",type(list),list)
print("json序列:",type(data),data)
#json反序列为python类型
cover = json.loads(data)
print("json反序列后",type(cover),cover)
#元组序列化为json
tuple = (1,2,3,4,5,6)
data1 = json.dumps(tuple)
print("python:",type(tuple),tuple)
print("json序列:",type(data1),data1)
#json反序列为python类型
cover1 = json.loads(data1)
print("json反序列后",type(cover1),cover1)
#字典序列化为json
dict = {'name':'jack','age':'24','sex':'F'}
data2 = json.dumps(dict)
print("python:",type(dict),dict)
print("json序列:",type(data2),data2)
#json反序列为python类型
cover2 = json.loads(data2)
print("json反序列后",type(cover2),cover2)
运行结果:
列表: <class 'list'> ['a', 'b', 'c', 'd', 'e']
json序列: <class 'str'> ["a", "b", "c", "d", "e"]
json反序列后 <class 'list'> ['a', 'b', 'c', 'd', 'e']
元组: <class 'tuple'> (1, 2, 3, 4, 5, 6)
json序列: <class 'str'> [1, 2, 3, 4, 5, 6]
json反序列后 <class 'list'> [1, 2, 3, 4, 5, 6]
字典: <class 'dict'> {'name': 'jack', 'age': '24', 'sex': 'F'}
json序列: <class 'str'> {"name": "jack", "age": "24", "sex": "F"}
json反序列后 <class 'dict'> {'name': 'jack', 'age': '24', 'sex': 'F'}
从运行结果可以看出,python数据类型json序列都是字符串类型
3.文件操作,实现json的序列和反序列
序列
#正常操作
dict ={'name':'lisi','number':'0102','sex':'M'}
with open('d:/test.txt','w+') as f1:
f1.write(dict)
print("到这里了")
运行结果:
TypeError: write() argument must be str, not dict #文件写入必须是字符串,不可以是字典
#文件操作,使用json
dict ={'name':'lisi','number':'0102','sex':'M'}
with open('d:/test.txt','w+') as f:
json.dump(dict,f) #文件 序列
运行结果:成功
反序列
with open('d:/test.txt') as f1:
data = json.load(f1) #文件 反序列
print(data)