我不能正确地将我的python数据附加到JSON文件



我不能以正确的方式将我的python数据附加到JSON,我已经尝试了很多解决方案,但没有任何工作可以让我得到最终结果。我想使用python创建一个注册表单当数据输入时它被输入到json文件中,像这样

{
"User_Data":[
"user_no_1":{
"First_name":first_name
"second_name":second_name
"last_name":last_name
},
"user_no_2":{
"First_name":first_name
"second_name":second_name
"last_name":last_name
},
"user_no_3":{
"First_name":first_name
"second_name":second_name
"last_name":last_name
}
]
}

但是当我运行这个python代码时:

import json
jsonFile_read_user_data = open("test.json", "r")


data = json.load(jsonFile_read_user_data)
first_name = input('Please enter your first name:')
second_name = input('Please enter your second name:')
last_name = input('Please enter your first name:')
data_inputed = {"user_no_1": {"first_name": first_name, "second_name": second_name, "last_name": last_name}}
data["USER_DATA"].append(data_inputed)
jsonFile_write_user_data = open("test.json", "w")
str = json.dump(data, jsonFile_write_user_data, indent = 4)
jsonFile_write_user_data.seek(0)

这是我的数据出现在test.json:

{
"USER_DATA": [
{
"user_no_1": {
"first_name": "yassin",
"second_name": "ahmed",
"last_name": "rakha"
}
},
{
"user_no_2": {
"first_name": "jhon",
"second_name": "doe",
"last_name": "escobar"
}
},
{
"user_no_3": {
"first_name": "elon",
"second_name": "musk",
"last_name": "rakha"
}
}
]
}

所有我想要的是有第一个例子显示,但在我的测试。Json文件,我不知道这是一个问题,在我的python代码,而试图追加或Json文件中的问题。

您提供的代码中有几个拼写错误可能会导致问题:

  1. 原始格式是而不是一个JSON字符串——它真的没有任何意义。您的文件试图表示类似Dict[str, List[str, Dict[str, Dict[str, str]]]]类型的对象,该对象不存在(并且缺少一些逗号)。我建议去掉多余的外键"user_data"。(因为它是一个单例键,它没有目的)而是创建一个类型为Dict[str, Dict[str, str]]的对象,并添加逗号并使所有内容都小写以使其标准化,像这样:

{"user_no_1": { "first_name":"James", "middle_name": "Herbert", "last_name":"Bond"}, ...}

  1. 简化你的代码,使它匹配这个新的数据类型(注意dict没有append方法)

使用with和一些字典理解,我们得到:

with open("test.json", 'r+') as user_data_file:
data = json.load(user_data_file)
names = {f'{x}_name': input(f'Please enter your {x} name: ') for x in ['first', 'second', 'last']}
data.update({'user_no_1': names}) # The |= is more concise, but only available with Python 3.9
json.dump(data, user_data_file, indent=4)
user_data_file.seek(0) # not really necessary, but I'll leave it in

最新更新