python编程 json字符串转对象

目录

一: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)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chenruhan_QAQ_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值