处理json json与字典的转换
一、json
json是一个字符串,是一种通用的数据格式,所有语言都可以解析,只不过长得比较像字典。使用json函数需要导入json库,即import json
json的格式只有双引号,不可用单引号
1、json.loads()和json.load()的区别
(1)json.loads() 将json串(字符串)转成字典
import json user_info = '''{"nhy":"123456","aa":"123456"}''' print(user_info) # {"nhy":"123456","aa":"123456"} user_dic = json.loads(user_info)# 把json串(字符串)转成字典 print(user_dic) # {'nhy': '123456', 'aa': '123456'} print('user_dic',type(user_dic)) # user_dic <class 'dict'> print('user_info',type(user_info)) # user_info <class 'str'>
(2) json.load(f) 这个是直接从文件里拿,不需要再读一次文件了,json直接读。帮我们封装了处理文件的功能
注释:f是指文件
import json f = open('stu.json') # stu.json文件内的内容 # { # "laowang": { # "cars": [ # "BMW", # "Ben-z" # ] # } # } # res1 = json.loads(f.read()) # print(res1) #{'laowang': {'cars': ['BMW', 'Ben-z']}} res = json.load(f) print(res) #{'laowang': {'cars': ['BMW', 'Ben-z']}}
例子:
#content = f.read() #d = json.loads(content) #d = json.load(f) #上面两行代码可以用这一行代码实现
# with open('info.txt',encoding='utf-8') as fw: # d = json.load(fw) # print(d) # print(d.get('name')) # print(d.get('money'))
2、json.dumps()和json.dump() 的区别
(1)json.dumps() 把字典转成json 把python的数据类型(比如字典里有元组)转换为json
import json stu_info = {'laowang':{'cars':['BMW','Ben-z']}} # stu_info是字典 stu_str = json.dumps(stu_info)# 把字典转成json(字符串) print('json...',type(stu_str)) # json... <class 'str'> print(stu_str) # {"laowang": {"cars": ["BMW", "Ben-z"]}}
如果字典里有中文,那么加一个参数即可,如:
stu_str = json.dumps(stu_info,ensure_ascii=False)
如果想让转换出来的json格式好看一点,可以加indent参数,格式化一下,如:
stu_str = json.dumps(stu_info,ensure_ascii=False,indent=4)
(2)json.dump() 不需要自己再操作一遍write,会主动写入文件。帮我们封装了处理文件的功能
import json stu_info = {'laowang':{'cars':['BMW','Ben-z']}} # fw = open('stu.txt','w',encoding='utf-8') # fw.write(stu_str) # stu_str是上述介绍json.dumps()中得到的json # fw.close() fw = open('stu.json','w',encoding='utf-8') json.dump(stu_info,fw,indent=4)# 不需要自己再write,会主动写入文件,indent指的是写入文件后,缩进几个空格
例子:
#json_str = json.dumps(d,indent=4,ensure_ascii=False) #f.write(json_str) #json.dump(d,f,indent=4,ensure_ascii=False)#上面两行代码,可以用这一行代码实现
hzy = [1,2,3,4] with open('info2.json','w',encoding='utf-8') as fw: json.dump(hzy,fw,ensure_ascii=False,indent=4)
二、json写注册登录
1 import json 2 f = open('users.txt','a+',encoding='utf-8') #文件句柄,文件对象 3 f.seek(0) 4 all_users = json.load(f) 5 for i in range(3): 6 u = input('user:').strip() 7 p = input('p:').strip() 8 cp = input('cp:').strip() 9 if not u or not p: 10 print('账号、密码不能为空') 11 elif u in all_users: 12 print('该用户已经被注册!') 13 elif u not in all_users and cp==p: 14 all_users[u]=p 15 break 16 f.seek(0) 17 f.truncate() 18 json.dump(all_users,f,indent=4) 19 f.close() 20 21 22 23 24 25 # username = input('username:') 26 # pwd = input('paswd') 27 #all_user = ['nhy','abc'] 28 #passwd = ['123456','12345'] 29 # 30 # if username in all_user and pwd in passwd: 31 # print('登录成功')