一、json进阶
json格式的限制:
json格式的key必须是字符串数据类型
json格式中的字符串只能是""
如果是数字为key,那么dump之后会强行转成字符串数据类型
1 import json 2 dic = {1:2,3:4} 3 str_dic = json.dumps(dic) 4 print(str_dic) 5 new_dic = json.loads(str_dic) 6 print(new_dic)
结果如下:
json是否支持元组,对元组做value的字典会把元组强制转换成列表
1 import json 2 dic = {‘abc‘:(1,2,3)} 3 str_dic = json.dumps(dic) 4 print(str_dic) 5 new_dic = json.loads(str_dic) 6 print(new_dic)
json不支持元组做key
1 import json 2 dic = {(1,2,3):‘abc‘} 3 str_dic = json.dumps(dic) # 报错
程序结果:
对列表的dump
1 import json 2 lst = [‘aaa‘,123,‘bbb‘,12.456] 3 with open(‘json_demo‘,‘w‘) as f: 4 json.dump(lst,f) 5 with open(‘json_demo‘) as f: 6 ret = json.load(f) 7 print(ret)
程序结果:
能不能多次dump数据到文件里,可以多次dump但是不能load出来了
1 import json 2 dic = {‘abc‘:(1,2,3)} 3 lst = [‘aaa‘,123,‘bbb‘,12.456] 4 with open(‘json_demo‘,‘w‘) as f: 5 json.dump(lst,f) 6 json.dump(dic,f) 7 with open(‘json_demo‘) as f: 8 ret = json.load(f) 9 print(ret)
程序结果:
想dump多个数据进入文件,用dumps
1 import json 2 dic = {‘abc‘:(1,2,3)} 3 lst = [‘aaa‘,123,‘bbb‘,12.456] 4 with open(‘json_demo‘,‘w‘) as f: 5 str_lst = json.dumps(lst) 6 str_dic = json.dumps(dic) 7 f.write(str_lst+‘\n‘) 8 f.write(str_dic+‘\n‘) 9 10 with open(‘json_demo‘) as f: 11 for line in f: 12 ret = json.loads(line) 13 print(ret)
程序结果:
数据中有中文ensure_ascii = False
1 import json 2 dic = {‘abc‘:(1,2,3),‘country‘:‘中国‘} 3 ret = json.dumps(dic,ensure_ascii = False) 4 print(ret) 5 dic_new = json.loads(ret) 6 print(dic_new) 7 8 with open(‘json_demo‘,‘w‘,encoding=‘utf-8‘) as f: 9 json.dump(dic,f,ensure_ascii=False)
程序结果:
json的其他参数,是为了用户看的更方便,但是会相对浪费存储空间
1 import json 2 data = {‘username‘:[‘李华‘,‘二愣子‘],‘sex‘:‘male‘,‘age‘:16} 3 json_dic2 = json.dumps(data,sort_keys=True,indent=4,separators=(‘,‘,‘:‘),ensure_ascii=False) 4 print(json_dic2)
程序结果:
C:\Users\Administrator\AppData\Local\Programs\Python\Python37\python.exe E:/02-面向对象,模块和包/day28/day28/3.序列化模块_json.py
{"abc": [1, 2, 3], "country": "中国"}
{‘abc‘: [1, 2, 3], ‘country‘: ‘中国‘}
{
"age":16,
"sex":"male",
"username":[
"李华",
"二愣子"
]
}
Process finished with exit code 0
集合set不能被dump/dumps
1 import json 2 set1 = {1,2,3} 3 json_set1 = json.dumps(set1) 4 print(json_set1) 5 new_set1= json.loads(json_set1) 6 print(new_set1)
第二部分 面向对象 Python28(序列化模块_json、pickle、shelve)及hashlib、logging、configparser模块、异常处理、collections模块
原文:https://www.cnblogs.com/liyong2323/p/12749624.html