一,序列化
主要分为通过函数进行序列化与反序列化达到传输数据的效果。根据情况可分为两种。
第一种,python与不同语言间进行交流,比如,后端语言,java c c++ c#等,因为需要使用都可以识别的数据类型进行传输,所有便诞生了Json模块。Json模块主要分为四个功能,dumps、dump、loads、load。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #该方法是通过控制内存地址进行序列化与反序列化的。 2 import json 3 dic = {'k1':'v1','k2':'v2','k3':'v3'} 4 str_dic = json.dumps(dic) #序列化:将一个字典转换成一个字符串 5 print(type(str_dic),str_dic) #<class 'str'> {"k3": "v3", "k1": "v1", "k2": "v2"} 6 #注意,json转换完的字符串类型的字典中的字符串是由""表示的 7 8 dic2 = json.loads(str_dic) #反序列化:将一个字符串格式的字典转换成一个字典 9 #注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示 10 print(type(dic2),dic2) #<class 'dict'> {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'} 11 12 13 list_dic = [1,['a','b','c'],3,{'k1':'v1','k2':'v2'}] 14 str_dic = json.dumps(list_dic) #也可以处理嵌套的数据类型 15 print(type(str_dic),str_dic) #<class 'str'> [1, ["a", "b", "c"], 3, {"k1": "v1", "k2": "v2"}] 16 list_dic2 = json.loads(str_dic) 17 print(type(list_dic2),list_dic2) #<class 'list'> [1, ['a', 'b', 'c'], 3, {'k1': 'v1', 'k2': 'v2'}] 18 loads和dumpsdumps与loads
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #该方法是通过控制文件进行序列化与反序列化的 2 import json 3 f = open('json_file','w') 4 dic = {'k1':'v1','k2':'v2','k3':'v3'} 5 json.dump(dic,f) #dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件 6 f.close() 7 8 f = open('json_file') 9 dic2 = json.load(f) #load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回 10 f.close() 11 print(type(dic2),dic2) 12 13 load和dumpView Code
注意,
- load与loads都只能识别带双引号的东西,所以直接在文件上添加需要添加双引号,而不是单引号。
- load与loads不可以直接识别多个数据类型,比如文件内有两个字典,此时就会报错。所以如果真的需要添加多个字典,此时需要dumps的配合。如下所示
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 with open('json_file','a') as f: 2 str_dic = json.dumps(dic) 3 f.write(str_dic+'\n') 4 str_dic = json.dumps(dic) 5 f.write(str_dic + '\n') 6 str_dic = json.dumps(dic) 7 f.write(str_dic + '\n') 8 9 with open('json_file','r') as f: 10 for line in f: 11 dic = json.loads(line.strip()) 12 print(dic.keys())多个字典
标签:dic2,dic,dumps,json,str,序列化 From: https://www.cnblogs.com/zuishaui/p/17872359.html