Python 向json文件添加信息时出现问题
我目前在将数据写入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
如果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
的内容示例吗?现在将其添加到问题中。请纠正我自己,这个修复程序已经成功了!我只是有一些额外的代码把事情搞砸了!谢谢你的帮助!尽管这不是一个完整的答案,但我还是给了你们一张赞成票,因为它解决了部分问题!非常感谢尽管这不是一个完整的答案,但我已经给了你们一张赞成票,因为它解决了部分问题!非常感谢