[英]How do i get a dictionary appended into a list without overlapping the exitsting dictionary json
我用 Python、JSON 和 Flask 編寫代碼我做了一個函數“make_user():”來從我的表單中獲取數據並將其插入到字典中:
users_list = []
@app.route("/makeuser", methods=["post"])
def make_user():
firstname = f.request.form["firstname"]
lastname = f.request.form["lastname"]
username = f.request.form["username"]
password = f.request.form["pwd"]
mail = f.request.form["email"]
car = f.request.form["car"]
res = {
"firstname" : firstname,
"lastname" : lastname,
"username" : username,
"password" : password,
"mail" : mail,
"car" : car
}
麻煩來了,當我嘗試打開我的 json 文件時,然后將現有字典添加到 users_list,然后附加表單中的輸入,然后將新列表轉儲到 json 文件中。 這是我的嘗試:
file = open("users.json", "r+")
users_list.append(file)
for list_item in users_list:
users_list.append(res)
json.dump(users_list,file)
file.close
return redirect(url_for("form"))
我想在 json 文件中包含一個列表,其中包含列表項作為字典,如下所示:[{},{},{},{}]
我如何解決這個問題的任何想法?
您需要從json
文件load
數據。
with open("users.json", "r") as file:
try:
users_list = json.load(file) # This should be your saved json structure
except json.decoder.JSONDecodeError: # in case your file does not contain valid json or is empty
users_list = []
if isinstance(users_list, dict): # this can be removed if your top level is a list
users_list = [users_list]
users_list.append(res) # append to the existing list
with open("users.json", "w") as file:
json.dump(users_list, file) # dump back to file
假設這就是您的文件中的內容。
{
"firstname" : "Martin",
"lastname" : "Mouse",
"username" : "mmouse",
"password" : "hunter9",
"mail" : "mmouse@dasney.com",
"car" : "Lambo"
}
json
模塊有一個方便的功能,可以從數據中讀取您的文件,並一步將其解析為 Python 對象。
users_list = json.load(file)
這基本上是在說:
user_list = {
"firstname" : "Martin",
"lastname" : "Mouse",
"username" : "mmouse",
"password" : "hunter9",
"mail" : "mmouse@dasney.com",
"car" : "Lambo"
}
下一步是確保您的頂級是一個list
,如果不是,則將其list
。
if isinstance(users_list, dict):
users_list = [users_list]
所以現在你的結構看起來像這樣。
[
{
"firstname" : "Martin",
"lastname" : "Mouse",
"username" : "mmouse",
"password" : "hunter9",
"mail" : "mmouse@dasney.com",
"car" : "Lambo"
}
]
此時,您可以附加新條目。
users_list.append(res)
現在是這個。
[
{
"firstname" : "Martin",
"lastname" : "Mouse",
"username" : "mmouse",
"password" : "hunter9",
"mail" : "mmouse@dasney.com",
"car" : "Lambo"
},
{
"firstname" : "Darnold",
"lastname" : "Duck",
"username" : "dduck",
"password" : "hunter10",
"mail" : "dduck@dasney.com",
"car" : "Ferrari"
}
]
最后,轉儲回文件。
with open("users.json", "w") as file:
json.dump(users_list, file) # dump back to file
file = open("users.json", "r+")
users_list.append(file)
此處的file
不包含users.json
的內容。 它是一個打開文件的“句柄”,您可以從中讀取數據——或傳遞給json.load
。
for list_item in users_list:
users_list.append(res)
這一點是無稽之談。 假設您正確加載了users.json
的內容,這會將res
附加到每個元素。 這不僅不是您想要的,而且不可能,因為每個元素都是一個字典。
由於您要替換文件的內容,因此您需要將其打開兩次; 一次閱讀,一次寫作。 您不能附加到文件,因為這會破壞結構化的 JSON。 嘗試這樣的事情:
with open("users.json") as file:
users_list = json.load(file)
users_list.append(res)
with open("users.json", "w") as file:
json.dump(users_list, file)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.