目录
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参数