添加使用 JSON 列表中的输入创建的字典

Add a dictionary created with inputs in a JSON list

我减少了这段代码,完整的代码有更多关于球员的数据,这段代码的目的是添加一个球员来输入程序请求的数据并将相同的数据记录在JSON 文件.

import json

class Player:
    def __init__(self, first_name, last_name):
        self.first_name = first_name
        self.last_name = last_name
        

class FootballPlayer(Player):
    def __init__(self, first_name, last_name, goals):
        super().__init__(first_name=first_name, last_name=last_name)
        self.goals = goals

print("Enter some football player's data!")

f_name = input("Enter player's first name: ")
l_name = input("Enter player's last name: ")
goals = input("Enter the number of player's goals: ")

new_player = FootballPlayer(first_name=f_name, last_name=l_name, goals=int(goals))

with open("football_players.json", "r") as player_list:
    football_players =json.loads(player_list.read())
    print(str(football_players))

with open("football_players.json", "a" ) as player_list:
    player_list.write(json.dump(new_player.__dict__, player_list))

问题是当我添加新播放器时,字典超出了在 JSON 文件中创建的列表。

像这样:

[

{
"first_name": "Luis",
"last_name": "Figo",
"goals": 398}

]

{"first_name": "Daniel", "last_name": "Mord", "goals": 33}

完全正确:您将新的 JSON 记录附加到现有文件。您没有将它添加到列表中。

文件对 JSON 结构或 Python 数据类型一无所知。如果您想将球员添加到 JSON 列表的文本版本中,那么您必须读入列表,将球员添加到列表中,然后将整个列表写回到文件中。

或者,您可以 seek 到文件末尾,备份一行,然后 (a) 将所有玩家写入文件——覆盖右括号,以及 (b)写一个新的右括号。

除非你有一个巨大的文件和明显的时间限制,否则我建议你阅读带有 json 包的文件,将你的玩家添加到 Python 列表,然后写入整个列表返回文件。