处理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('登录成功')

 

 
posted @ 2018-06-11 11:10  灿烂初秋  阅读(449)  评论(0编辑  收藏  举报