如何在python中现有数据的末尾添加新的JSON数据

  • 本文关键字:数据 添加 JSON python python json
  • 更新时间 :
  • 英文 :


我正在尝试从用户输入填充JSON文件。users.json文件最初是空的,我可以注册第一个用户("Doe_Joh")。问题是当我运行程序并注册第二次使用时。里面的数据被数据替换了。我所期望的是增量地保存数据。我怎样才能做到这一点呢?

这是我的代码。

import json
class User:
def register():
first = input("Name: ")
last = input("Last: ")
username = input("Username: ")
email = input("Email: ")
user_data = {  username: [ {
"fname": first, 
"lname": last,
"username": username,
"email": email
}

]
} 
with open("users.json", "w") as outfile:
json.dump(user_data, outfile, indent=4)



user1 = User
user1.register()

有两种方法:

加载整个用户。Json,在文件末尾添加一个新用户,并保存所有内容。

import json
from dataclasses import dataclass

@dataclass
class User:
f_name: str
l_name: str
username: str
email: str

def save_user(user: User) -> None:
with open("users.json", "r") as file:
try:
file_data = json.load(file)
except JSONDecodeError:
file_data = {}
file_data[user.username] = [{
"fname": user.f_name,
"lname": user.l_name,
"username": user.username,
"email": user.email
}]
with open("users.json", "w") as outfile:
json.dump(file_data, outfile, indent=4)

def register():
first = input("Name: ")
last = input("Last: ")
username = input("Username: ")
email = input("Email: ")
user_data = User(
f_name=first,
l_name=last,
username=username,
email=email
)
save_user(user=user_data)

register()

没有数据类(根据OP的要求):

import json

def save_user(user) -> None:
with open("users.json", "r") as file:
try:
file_data = json.load(file)
except JSONDecodeError:
file_data = {}
file_data[user['username']] = [{
"fname": user['f_name'],
"lname": user['l_name'],
"username": user['username'],
"email": user['email']
}]
with open("users.json", "w") as outfile:
json.dump(file_data, outfile, indent=4)

def register():
first = input("Name: ")
last = input("Last: ")
username = input("Username: ")
email = input("Email: ")
user_data = {
"f_name": first,
"l_name": last,
"username": username,
"email": email
}
save_user(user=user_data)

register()

或者尝试打开您的用户。Json的附加模式:

with open("users.json", "a") as outfile:
json.dump(user_data, outfile, indent=4)

注意"a"在open()函数中。
注意:这会破坏文件

的格式化。

可以使load()函数加载以前保存的数据

import json
import os
data = {}

class User():
def register(self):
first = input("Name: ")
last = input("Last: ")
username = input("Username: ")
email = input("Email: ")
data[username] = [{
"fname": first,
"lname": last,
"username": username,
"email": email
}
]
with open("users.json", "w") as outfile:
json.dump(data, outfile, indent=4)
def load(self):
global data
with open("users.json", "r") as outfile:
data = json.loads(outfile.read())
print(data, type(data))
return data

user1 = User()
if os.path.isfile("users.json"):
user1.load()
user1.register()

最新更新