目录
一:json对象转换为json字符串
二:json字符串转换为json对象
三:json字符串'{"name":"lily","sno":1001}'
四:python面向对象程序设计
一:json对象转换为json字符串
import json
# 1 python对象[dict]---json对象转换为json字符串
obj = {
"name": "lily",
"sno": 1001
}
json_str = json.dumps(obj)
print(json_str, type(json_str))
输出结果:
{"name": "lily", "sno": 1001} <class 'str'>
二:json字符串转换为json对象
import json
# 2 json字符串转换为json对象---python对象[dict list]
obj = {
"name": "lily",
"sno": 1001
}
json_str = json.dumps(obj)
json_obj = json.loads(json_str)
print(json_obj, type(json_obj))
输出结果:
{'name': 'lily', 'sno': 1001} <class 'dict'>
三:json字符串'{"name":"lily","sno":1001}'
import json
# 3 json字符串'{"name":"lily","sno":1001}'
obj = {
"name": "lily",
"sno": 1001
}
j_str = '{"name":"lily","sno":1001}'
j_obj = json.loads(j_str)
print(j_obj, type(j_obj))
输出结果:
{'name': 'lily', 'sno': 1001} <class 'dict'>
四:python面向对象程序设计
json数据结构
练习如下
A.自定义用户信息数据结构, 写入文件, 然后读取出内容,包括 read_file及write_file方法, 利用json模块进行数据的序列化和反序列化
B.定义用户类,定义方法db,例如 执行obj.db可以拿到用户数据结构
C.在该类中实现登录、退出方法, 登录成功将状态(status)修改为True, 退出将状态修改为False(退出要判断是否处于登录状态).密码输入错误三次将设置锁定时间(下次登录如果和当前时间比较小于30秒即不允许登录)
用户数据结构一:user_info
{
"lily":{"password":"123",'status':False,'timeout':0},
"sunny":{"password":"456",'status':False,'timeout':0},
}
提示:json模块
序列化 json.dumps() 把json对象转化成json字符串 编码
反序列化json.loads() 把json字符串转化为json对象 解码
import json
import time
class User: # 用户类
def __init__(self):
self.user_dic = self.read() # 初始化时将用户信息读取出来
self.username = "" # 记录当前登录用户
def write(self):
with open("user info", "w", encoding="utf-8") as f:
json.dump(self.user_dic, f) # 序列化
def read(self):
with open("user_info", "r", encoding="utf-8") as f:
user_dic = json.load(f) # 反序列化
return user_dic
def db(self):
print("用户数据结构:", self.user_dic)
def login(self):
i = 0
while i < 3:
username = input("username:").strip()
password = input("password:").strip()
if username in self.user_dic and password == self.user_dic[username]["password"]:
time_now = time.time() # 获取当前时间
period = time_now - self.user_dic[username]["timeout"] # 时间差
if period >= 30: # 判断时间间隔是否满足登录条件
print("------%s登陆成功-------" % username)
self.username = username
self.user_dic[username]["status"] = True # 记录用户登录状态
self.write() # 将修改保存到文件
break
else:
print("用户名或密码错误!")
i += 1
if i == 3 and username in self.user_dic:
self.user_dic[username]["timeout"] = time.time() # 记录三次登录失败的时间点
self.write() # 将修改保存到文件
exit("退出")
def exit(self):
if self.username: # 用户处于登录状态
self.user_dic[self.username]["status"] = False # 修改用户登录状态
self.write() # 将修改保存到文件
exit("用户%s退出登录" % self.username)