# json 转义 dump 反转义 load
# json 模块的限制
# 1.json格式的key必须是字符串数据类型
# 2.json格式中的字符串只能是""
#---------------------------------------------字典------------------------------------------------------
#-----字典中的 k 值-------------如果是数字为key,那么dump之后回强转成字符串数据类型
# import json
# dic = {1:2,3:4}
# str_dic = json.dumps(dic) # 使用dumps对定义好的字典进行转义
# print(str_dic) # 结果为 {"1": 2, "3": 4}
#
# new_dic = json.loads(str_dic) # 使用loads 对之前转义过的字符串反转义成为之前的数据类型--字典
# print(new_dic) #{'1': 2,'3': 4}
#--- dic = {k1:(元组)} 元组会被强制转换为列表
# import json
# dic ={"k1":"v1","k2":(1,2,3)}
# str_dic = json.dumps(dic) # 将字典转义成为一个字符串,其中value 如果是元组的话,回别强制转化成为列表
# print(str_dic,type(str_dic)) # 结果是{"k1": "v1", "k2": [1, 2, 3]} <class 'str'>
# new_dic = json.loads(str_dic) #将之前转化成字符串的字典反转义成为原来的字典,里面的元组还是回保留成为列表数据类型.
# print(new_dic,type(new_dic)) # 结果是{'k1': 'v1', 'k2': [1, 2, 3]} <class 'dict'>
# ----字典( k 不可以使用元组)
# import json
# dic = {(1,2,3):"v1"} # 字典可以被定义
# str_dic = json.dumps(dic) # 因为字典中的 k 值是一个元组,不支持,所以程序会报错.
# print(str_dic)
#-----------------------------------------列表-------------------------------------------------
# ---------将列表转义成字符串写入文件,再读取文件中的字符串,反转义成为列表打印
# import json
# lst = ["aaa",123,"bbb",12.345]
# with open("lst.txt","w") as f: # 打开一个文件
# json.dump(lst,f) # 将列表lst 转义成为一个字符串,并且将此字符串写入文件中.
# with open("lst.txt") as f: #打开刚刚那个文件.
# ret = json.load(f) # 将文件中的保存的字符串类型的文件反转义成为之前的列表
# print(ret,type(ret)) # 结果是 ['aaa', 123, 'bbb', 12.345] <class 'list'>
#------可以多次将列表,字典,dump转义放入到文件,但是不能从文件一次性load 将文件取出来反转义
# import json
# dic = {"abc":(1,2,3)} # 定义一个字典
# lst = ["aaa","123","bbb","456"] #定义一个列表
# with open("json_demo","w") as f: #打开文件
# json.dump(lst,f) #将转义后的列表写入到文件中
# json.dump(dic,f) #将转义后的字典写入到文件中
# with open("json_demo") as f: #打开文件
# ret = json.loads(f) #将文件中的内容进行反转义读出来 ------(不允许将多次写入的内容一次性读出来,程序会报错)
# print(ret)
# -------------想将多个类型的数据dumps写入文件中,并且loads取出来(将文件单独转义,每一个文件写一行,取出来的时候也是按一行取出来)
# import json
# dic = {"k1":"v1","k2":"v2"} #定义一个字典
# lst = [1,2,3,4] #定义一个列表
# with open("json_dome","w") as f: #打开文件
# str_dic = json.dumps(dic) #将字典进行转义
# str_lst = json.dumps(lst) #将列表进行转义
# f.write(str_dic+"
") #将转义后的字典(字符串类型)写入文件中,光标跳到下一行开头
# f.write(str_lst+"
") #将转义后的列表(列表类型) 写入文件中 ,重新起一行开始写入
# with open("json_dome") as f: #打开文件获取到文件句柄
# for i in f: #分别取出文件中每一行
# ret = json.loads(i) #将每一行进行反转义(每一行就是之前的一个文件)
# print(ret)
#------------ 转义过程中有中文 ensure_ascii = False
# import json
# dic = {"a":"b","country":"中国"}
# # ret = json.dumps(dic,ensure_ascii=True) # {"a": "b", "country": "u4e2du56fd"}
# ret = json.dumps(dic,ensure_ascii=False) # {'a': 'b','country': '中国'}
# print(ret)
# dic_new = json.loads(ret)
# print(dic_new)
#----------写入文件过程中有中文
# 中文格式的 ensure_ascii = False
# import json
# dic = {'abc':(1,2,3),'country':'中国'}
# ret = json.dumps(dic,ensure_ascii = False)
# print(ret)
# dic_new = json.loads(ret)
# print(dic_new)
#
# with open('json_demo','w',encoding='utf-8') as f:
# json.dump(dic,f,ensure_ascii=False)
# json的其他参数,是为了用户看的更方便,但是会相对浪费存储空间
# import json
# data = {'username':['李华','二愣子'],'sex':'male','age':16}
# json_dic2 = json.dumps(data,sort_keys=True,indent=4,separators=(',',':'),ensure_ascii=False)
# print(json_dic2)
# set不能被dump/dumps