我用 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 檔案中包含一個串列,其中包含串列項作為字典,如下所示:[{},{},{},{}]
我如何解決這個問題的任何想法?
uj5u.com熱心網友回復:
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.jsonthis的內容將附加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)
uj5u.com熱心網友回復:
您需要load從json檔案中獲取資料。
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" : "[email protected]",
"car" : "Lambo"
}
該json模塊有一個方便的功能,可以從資料中讀取您的檔案,并一步將其決議為 Python 物件。
users_list = json.load(file)
這基本上是在說:
user_list = {
"firstname" : "Martin",
"lastname" : "Mouse",
"username" : "mmouse",
"password" : "hunter9",
"mail" : "[email protected]",
"car" : "Lambo"
}
下一步是確保您的最高級別是一個list,如果不是,則是這樣。
if isinstance(users_list, dict):
users_list = [users_list]
所以現在你的結構看起來像這樣。
[
{
"firstname" : "Martin",
"lastname" : "Mouse",
"username" : "mmouse",
"password" : "hunter9",
"mail" : "[email protected]",
"car" : "Lambo"
}
]
此時,您可以附加新條目。
users_list.append(res)
現在是這個。
[
{
"firstname" : "Martin",
"lastname" : "Mouse",
"username" : "mmouse",
"password" : "hunter9",
"mail" : "[email protected]",
"car" : "Lambo"
},
{
"firstname" : "Darnold",
"lastname" : "Duck",
"username" : "dduck",
"password" : "hunter10",
"mail" : "[email protected]",
"car" : "Ferrari"
}
]
最后,轉儲回檔案。
with open("users.json", "w") as file:
json.dump(users_list, file) # dump back to file
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/349094.html
