【问题标题】:I cannot append my python data to JSON file properly我无法正确地将我的 python 数据附加到 JSON 文件中
【发布时间】:2021-10-25 03:32:34
【问题描述】:

我无法以正确的方式将我的 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"
            }
        }

    ]
}

我想要的只是让第一个示例按原样显示,但在我的 test.json 文件中,我不知道这是否是我的 python 代码在尝试追加时出现的问题或 json 文件中的问题。

【问题讨论】:

  • 什么不起作用?你实际上并没有解释。
  • 我想要让我的 json 文件像第一个示例一样,我在最后一个代码示例中添加了我的 json 文件的样子

标签: python json python-3.x


【解决方案1】:

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

  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

【讨论】:

  • 好的,非常感谢你对这件事的帮助,我真的很感激,但我只是想创建一个注册,只使用 python 和 json 登录系统,所以有什么建议吗?这可能
  • 我想做这件事,这样当有人尝试登录时我可以得到电子邮件和密码,所以你认为我能做到吗,就像我的想法是获取这样的数据“user_no “[“名”]。但是我会为电子邮件和密码做同样的事情,我希望你能帮助我,如果你不太明白,我会尝试用更简单的方式告诉它
  • 我的意思是,登录什么?如果您的意思是在网站上,您将需要某种方式与该网站交互(如果是这样,请查看 BeautifulSouprequests 库)。如果您只是在使用您的代码时更像是假装“登录”,那么当然,您现在所拥有的基本上可以做到这一点。只需获取用户输入的电子邮件和密码即可
  • 顺便说一句,将某人的密码作为原始文本存储在一个简单的 JSON 字典中似乎非常不安全——这实际上是在乞求某人破解你。
  • 好的,非常感谢您对我的问题的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-14
  • 2019-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多