Python 向json文件添加信息时出现问题

Python 向json文件添加信息时出现问题,python,python-3.x,Python,Python 3.x,我目前在将数据写入json文件时遇到问题。我目前使用的代码如下: 如果os.getenv(“firstRun”)=“0”: tickets=json.load(打开('tickets.json').read()) 票证[“票证”]。附加({ 总票数:{ “票号”:总票数, “投诉人”:投诉人, “报告用户”:reportedID, “原因”:原因 } }) 以open('tickets.json','a')作为输出文件: json.dump(票据、输出文件) 这就是我目前如何将信息写入文件ti

我目前在将数据写入json文件时遇到问题。我目前使用的代码如下:

如果os.getenv(“firstRun”)=“0”:
tickets=json.load(打开('tickets.json').read())
票证[“票证”]。附加({
总票数:{
“票号”:总票数,
“投诉人”:投诉人,
“报告用户”:reportedID,
“原因”:原因
}
})
以open('tickets.json','a')作为输出文件:
json.dump(票据、输出文件)
这就是我目前如何将信息写入文件
tickets.json

当它工作时,每次都会创建一个名为
tickets
的新对象。当试图从文件中获取信息时(或至少我获取信息的方式),这最终会成为一个问题 这可以在这里看到:

输出

{"tickets": [{
  "1": {
    "Ticket Number": 1,
    "Complaintant": "Miho#0001",
    "Reported User": 133344122986561537,
    "Reason": null}}]}

{"tickets": [{"1": {
  "Ticket Number": 1,
  "Complaintant": "Miho#0001",
  "Reported User": 711230916516773989,
  "Reason": null}}]}
期望的结果

{
  "tickets": {
    "1": {
      "Ticket Number": 1,
      "Complaintant": "Miho#0001",
      "Reported User": 133344122986561540,
      "Reason": "Cancerous Scripting"
    },
    "2": {
      "ticket Number": 2,
      "Complaintant": "Miho#0001",
      "Reported User": 133344122986561540,
      "Reason": "Cancerous Scripting"
    }
  }
}
如果您想知道我想做什么,请让它在每次运行函数时创建一个新对象(不是票证,而是一个数字)


从输出中可以看出,它创建了一个全新的对象,如何解决这个问题?

首先,您将
票证
初始化为一个数组。它应该是一个对象。那就是文件的初始内容应该是这样的

{
“票”:{}
}
现在,在加载
JSON
文件后,假设您在
tickets
变量中持有相应的python dict。那你就可以了


票务[“票务”][总票务]={
“票号”:总票数,
“投诉人”:投诉人,
“报告用户”:reportedID,
“原因”:原因
}

在这之后,由于将
'a'
传递到对
open
函数的第二次调用,您将使用以前的数据追加数据。使用
'w'
代替
'a'
。这意味着覆盖文件以前的内容。这应该可以完成您的工作。

首先,您将
票据初始化为一个数组。它应该是一个对象。那就是文件的初始内容应该是这样的

{
“票”:{}
}
现在,在加载
JSON
文件后,假设您在
tickets
变量中持有相应的python dict。那你就可以了


票务[“票务”][总票务]={
“票号”:总票数,
“投诉人”:投诉人,
“报告用户”:reportedID,
“原因”:原因
}

在这之后,由于将
'a'
传递到对
open
函数的第二次调用,您将使用以前的数据追加数据。使用
'w'
代替
'a'
。这意味着覆盖文件以前的内容。这应该可以完成您的工作。

如果
totalTickets
是一个包含新对象键的变量,那么您的代码应该类似于:

with open('tickets.json', 'r') as rf:
    tickets = json.load(rf)

tickets["tickets"][totalTickets] = {
    'Ticket Number': totalTickets,
    'Complaintant': complainant,
    'Reported User': reportedID,
    'Reason': reason
}

with open('tickets.json', 'w') as wf:
    json.dump(tickets, wf)
这将打开文件进行读取,将其读入
tickets
dict,使用新对象添加新密钥并覆盖文件。

您不希望在此处使用append或list,因为您希望您的对象成为一个字典,正如您在所需输出中发布的那样。

如果
totalTickets
是一个包含新对象键的变量,则您的代码应该类似于:

with open('tickets.json', 'r') as rf:
    tickets = json.load(rf)

tickets["tickets"][totalTickets] = {
    'Ticket Number': totalTickets,
    'Complaintant': complainant,
    'Reported User': reportedID,
    'Reason': reason
}

with open('tickets.json', 'w') as wf:
    json.dump(tickets, wf)
这将打开文件进行读取,将其读入
tickets
dict,使用新对象添加新密钥并覆盖文件。

您不希望在此处使用append或list,因为您希望您的对象是一个字典,正如您在所需输出中发布的那样。

使用open(…,'a')
时出现问题。
这是一种追加模式,您不希望将文本追加到文件中,而是将值追加到json键中。将
'a'
替换为
'w'
作为“写入模式”。使用open(…,'a')
执行
操作时会出现问题。这是一种追加模式,您不希望将文本追加到文件中,而是将值追加到json键中。将
'a'
替换为
'w'
作为“写入模式”。这确实有效,但是我仍然会遇到一个问题,即创建一个新对象,而不是将其添加到现有的
票证
对象。我不清楚您的问题。在运行代码后,您能为我提供一个
tickets.json
的内容示例吗?现在将其添加到问题中。请纠正我自己,这个修复程序已经成功了!我只是有一些额外的代码把事情搞砸了!谢谢你的帮助!这确实有效,但是我仍然会遇到一个问题,即创建一个新对象,而不是将其添加到现有的
票据中。在运行代码后,您能为我提供一个
tickets.json
的内容示例吗?现在将其添加到问题中。请纠正我自己,这个修复程序已经成功了!我只是有一些额外的代码把事情搞砸了!谢谢你的帮助!尽管这不是一个完整的答案,但我还是给了你们一张赞成票,因为它解决了部分问题!非常感谢尽管这不是一个完整的答案,但我已经给了你们一张赞成票,因为它解决了部分问题!非常感谢