复习Python第八节之json数据

目录

JSON数据学习

1.数据交换

2.json语法:              

 1). 什么是json?

2).json的库函数:

3).dumps()与dump()以及loads()与load()函数之间的差别:

4). Json来模拟以下数据库,文本文档当作数据库:

5).使用json案例实现记账本(dumps()与loads()文本文档进行写入写出):


JSON数据学习

1.数据交换


              网站后台代码的数据,如何传到前端网页?

              答:通过数据库

            不同语言平台的程序,如何实现数据传输?

              答:可以通过设定一种中间格式json ,java与python都可以转化这个格式。

2.json语法:              

 1). 什么是json?

     JSON 是用于存储和交换数据的语法。JSON (JavaScript Object Notation)最初是用 JavaScript 对象表示法编写的文本,但随后成为了一种常见格式,被包括Python在内的众多语言采用。

 Json使用键值对的方式表示一个业务对象(类似于字典)。

 {"键1":"值1","键2":"值2","键3":"值3"....} 多个业务对象使用 列表[ ]包含:[{…},{…},{…},{…},…]

 import json5   ,我这个是json5版本

2).json的库函数:

方法作用
json.dumps()将python对象编码成Json字符串
json.loads()将Json字符串解码成python对象
json.dump()将python中的对象转化成json储存到文件中
json.load()将文件中的json的格式转化成python对象提取出来

3).dumps()与dump()以及loads()与load()函数之间的差别:

dumps()与dump()在转化成json对象,跟文件结合写入文件。前者是生成字符串,后者是生成字符流(文本文档)。

loads()是针对内存对象、load()针对文件 ,都是将string转换为dict,同文件结合读出文件。

具体查看请查看末尾的链接(大佬的总结)。

下面是dumps()与loads() 的使用: 

#1.json转python(转成字典或者列表嵌套字典)
#这就把我们储存在txt文件里面的json格式的内容读取出来了。
jsonData='{"name": "zhangsan" , "age":18,"hobby" : "play"}'
pythonData=json5.loads(jsonData)   #load方法
print(pythonData)

  结果是: 

{'name': 'zhangsan', 'age': 18, 'hobby': 'play'}
#ensure_ascii=True:默认输出ASCLL码,如果把这个该成False,就可以输出中文。
#这个方法结合了文件的操作,把转换后的json储存在了文件里。
pdata='{"name":"zzz","play":"跑步"}'
jsond=json5.dumps(pdata,ensure_ascii=False)
print(jsond,type(pdata))

  结果是:

"{\"name\":\"zzz\",\"play\":\"跑步\"}" <class 'str'>

4). Json来模拟以下数据库,文本文档当作数据库:

首先往文本文档中写数据:

#写数据
with open (r"user.txt","w") as f:
    users='[{"uname": "zhangsan", "upwd": "123"}, {"uname": "lisi", "upwd": "123"}, ' \
          '{"uname": "wangwu", "upwd": "123"}, {"uname": "大宝", "upwd": "234"}]'
    f.write(users)

读文件并实现一个登录:

import json5
def readd():
    with open(r"user.txt","r") as f:
        jsond=f.read()
    userlist=json5.loads(jsond)
    return userlist
def login():
    msg="失败"
    name=input("请输入用户名:")
    password=input("请输入密码:")
    userlist=readd()
    for user in userlist:
        if name==user['uname'] and  password ==user['upwd']:
            msg="成功"
            print("恭喜登录成功")
    if msg=="失败" :
        print("登录失败")
    return msg
if __name__=='__main__':
    login()

       

  比上一个完整一下(读写以及其他操作,就当复习了)没有实现修改到文本文档中。

import json5

#读数据
def readd():
    with open(r"user.txt","r") as f:
        jsond=f.read()
    userlist=json5.loads(jsond)
    return userlist
#写数据(修改)
def writedata(xgname):
    userlist = readd()
    for user in userlist:
        if xgname== user['uname']:
            print(user)
            user["upwd"]=input("请输入你要修改得密码:")
            print(userlist)
        else:
            pass
           
def login():
    msg = "失败"
    name = input("请输入用户名:")
    password = input("请输入密码:")
    userlist = readd()
    for user in userlist:
        if name == user['uname'] and password == user['upwd']:
            msg = "成功"
            print("恭喜登录成功")
    if msg == "失败":
        print("登录失败")
    return msg,name

def main1():
    choice1=int(input("0代表登录,1代表创建新用户,其他任意键为退出:"))
    if choice1 ==0:
        msg,name=login()
        if msg=="成功":
            print("开始你的使用")
            choice2 = int(input("如果修改密码请按1:"))
            if choice2==1:
                writedata(name)
    elif choice1==1:
        reg()
    else:
        exit()
def reg():
    name=input("请输入新的用户:")
    password=input("请输入密码:")
    newuser={"uname":name,"upwd":password}
    userlist=readd()
    userlist.append(newuser)
    print(userlist)
if __name__=='__main__':
    main1()

5).使用json案例实现记账本(dumps()与loads()文本文档进行写入写出):

实现很简单的思想,每一次写入都是重写。

初始化数据,先让文件存在点数据。注意:一个文本文件中只能保存一种业务对象。

d='[{"时间": "2021/03/04 15:20:21", "项目": "收到王敏货款", "金额": 20000, "分类": "收入"}]'
with open(r"data.txt","w") as f:
		f.write(d)

再进行写入写出:

#初始数据一定要通过程序写入
#一个文本文件中只能保存一种业务对象

import json5
import datetime
import time
#读json数据
def readData():
	with open(r"data.txt","r") as f:
		jsonData=f.read()
	dataList=json5.loads(jsonData)
	return dataList

#写json数据
def writeData(dataList):
	jsonData=json5.dumps(dataList,ensure_ascii=False)
	with open(r"data.txt","w") as f:
		f.write(jsonData)
		print("------数据写入成功!")

#显示账目
def showData():
	sumIn=0 #总收入
	sumOut=0 #总开支
	dataList=readData()
	print("**************************账单*******************************")
	for data in dataList:
		if data["分类"]=="支出":
			sumOut+=data["金额"]
			print(data["时间"],"    ",data["项目"],"    ",data["金额"]*-1)
		else:
			sumIn+=data["金额"]
			print(data["时间"],"    ",data["项目"],"    ",data["金额"])
	print("**************************************************************")
	print("**总收入:",sumIn,"元,总开支:",sumOut,"元,结余:",sumIn-sumOut,"元!")


#增加一笔账目
def addData():
	dataList=readData()
	content=input("请输入账单明细:")
	amount=float(input("请输入账单金额:"))
	c=int(input("请选择(1.收入 2.支出):"))
	cla="支出"
	if c==1:
		cla="收入"
	t=datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S")
	newData={"时间":t, "项目":content, "金额":amount, "分类":cla}
	dataList.append(newData)
	writeData(dataList)



if __name__ == '__main__':
	while 1==1:
		showData()
		c=int(input("=====增加账目请输入1:"))
		if c==1:
			addData()
		time.sleep(2)
		print("\n\n\n")
	

借鉴资源:(53条消息) python的JSON用法——dumps的各种参数用法(详细)_爱吃草莓蛋糕的猴的博客-CSDN博客_json.dump参数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值