使用python将JSON对象写入文件

时间:2017-02-06 11:17:08

标签: python json file

所以我在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。

2 个答案:

答案 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)