序列化(Serialization):
用于序列化的两个模块
json提供四个功能:dumps, dump, loads, load
1 # dumps功能
2 # 将数据通过特殊的形式转换为所有程序语言都认识的字符串
3 >>> import json
4 >>> data = ['aa', 'bb', 'cc']
5 >>> j_str = json.dumps(data)
6 >>> j_str
7 '["aa", "bb", "cc"]'
1 # loads功能
2 # 将json编码的字符串再转换为python的数据结构
3 >>> j_str
4 '["aa", "bb", "cc"]'
5 >>> mes = json.loads(j_str)
6 >>> mes
7 ['aa', 'bb', 'cc']
1 # dump功能
2 # 将数据通过特殊的形式转换为所有程序语言都认识的字符串,并写入文件
3 with open('D:/tmp.json', 'w') as f:
4 json.dump(data, f)
1 # load功能
2 # 从数据文件中读取数据,并将json编码的字符串转换为python的数据结构
3 with open('D:/tmp.json', 'r') as f:
4 data = json.load(f)
说明:
json编码支持的基本类型有:None, bool, int, float, string, list, tuple, dict.
对于字典,json会假设key是字符串(字典中的任何非字符串key都会在编码时转换为字符串),要符合JSON规范,应该只对python列表和字典进行编码。此外,在WEB应用中,把最顶层对象定义为字典是一种标准做法。
json编码的格式几乎和python语法一致,略有不同的是:True会被映射为true,False会被映射为false,None会被映射为null,元组()会被映射为列表[],因为其他语言没有元组的概念,只有数组,也就是列表。
1 >>> import json
2 >>> data = {'a':True, 'b':False, 'c':None, 'd':(1,2), 1:'abc'}
3 >>> j_str = json.dumps(data)
4 >>> j_str
5 '{"a": true, "c": null, "d": [1, 2], "b": false, "1": "abc"}'
1 # dumps功能
2 import pickle
3 data = ['aa', 'bb', 'cc']
4 # dumps 将数据通过特殊的形式转换为只有python语言认识的字符串
5 p_str = pickle.dumps(data)
6 print(p_str)
b'\x80\x03]q\x00(X\x02\x00\x00\x00aaq\x01X\x02\x00\x00\x00bbq\x02X\x02\x00\x00\x00ccq\x03e.
b'\x80\x03]q\x00(X\x02\x00\x00\x00aaq\x01X\x02\x00\x00\x00bbq\x02X\x02\x00\x00\x00ccq\x03e.
1 # loads功能
2 # loads 将pickle数据转换为python的数据结构
3 mes = pickle.loads(p_str)
4 print(mes)
5 ['aa', 'bb', 'cc']
1 # dump功能
2 # dump 将数据通过特殊的形式转换为只有python语言认识的字符串,并写入文件
3 with open('D:/tmp.pk', 'w') as f:
4 pickle.dump(data, f)
1 # load功能
2 # load 从数据文件中读取数据,并转换为python的数据结构
3 with open('D:/tmp.pk', 'r') as f:
4 data = pickle.load(f)