所以我在python中有一个函数,它生成一个像这样的字典:
player_data = {
"player": "death-eater-01",
"guild": "monster",
"points": 50
}
我通过调用函数来获取此数据。一旦我得到这些数据,我想把它写成一个文件,所以我打电话给:
g = open('team.json', 'a')
with g as outfile:
json.dump(player_data, outfile)
这很好用。但是我的问题是,由于一个团队由多个玩家组成,我再次调用该函数来获取新的玩家数据:
player_data = {
"player": "moon-master",
"guild": "mage",
"points": 250
}
现在,当我将这些数据写入同一个文件时,JSON会中断...就像在,它会像这样显示(两个节点之间缺少逗号):
{
"player": "death-eater-01",
"guild": "monster",
"points": 50
}
{
"player": "moon-master",
"guild": "mage",
"points": 250
}
我想要的是将这些数据作为适当的JSON存储到文件中。由于各种原因,我无法预先准备完整的JSON对象,然后一次保存。由于网络破坏,性能和其他问题,我必须逐步完成。
任何人都可以指导我如何做到这一点?我正在使用Python。
答案 0 :(得分:2)
您不应将数据附加到现有文件。相反,您应首先在Python中构建一个列表,其中包含您要编写的所有dicts,然后将其转储到JSON并将其写入文件。
如果你真的不能这样做,一个选择是加载现有文件,将其转换回Python,然后附加你的新dict,转储到JSON并将其写回来替换整个文件。
答案 1 :(得分:0)
要生成有效的JSON,您需要加载文件的先前内容,将新数据附加到该文件,然后将其写回文件。
像这样:
def append_player_data(player_data, file_name="team.json"):
if os.path.exists(file_name):
with open(file_name, 'r') as f:
all_data = json.load(f)
else:
all_data = []
all_data.append(player_data)
with open(file_name, 'w') as f:
json.dump(all_data, f)