Python 为什么我的json文件中的所有值都在更新?

Python 为什么我的json文件中的所有值都在更新?,python,json,kivy,Python,Json,Kivy,我有一个按钮列表,当按下时,将值1添加到score。该按钮被视为screen\u two.ids.streak\u区域的子按钮。当我按下按钮时,它会更新json文件中所有按钮的score值。如何使它只更新一个按钮 这是我的密码: def add_score(self, obj): for child in reversed(self.root.screen_two.ids.streak_zone.children): name = child.text

我有一个按钮列表,当按下时,将值1添加到
score
。该按钮被视为
screen\u two.ids.streak\u区域的子按钮
。当我按下按钮时,它会更新json文件中所有按钮的
score
值。如何使它只更新一个按钮

这是我的密码:

def add_score(self, obj):
        for child in reversed(self.root.screen_two.ids.streak_zone.children):
            name = child.text

            with open("streak.json", "r") as file:
                read = json.load(file)

            for key in read.keys():
                if key == name:
                    with open("streak.json", "r+") as f:
                        data = json.load(f)
                        data[key]['score']+=1
                        f.seek(0)
                        json.dump(data, f, indent=4)
                        f.truncate()
json文件:

{
    "one": {
        "action": "one",
        "delay": 1558824388.0762293,
        "seconds": 60,
        "score": 5,
        "delta": 1558224388.0762293
    },
    "two": {
        "action": "two",
        "delay": 1558824393.8408294,
        "seconds": 60,
        "score": 5,
        "delta": 1558224393.8408294
    }
}

删除了子循环并生成
name=obj.text

代码:


您可以为子项运行
循环,以便为所有按钮执行此操作。可能在某些地方添加
print()
,以查看变量中包含的内容以及执行的代码部分。如果变量
read
中已经包含相同的数据,我不知道为什么要再次加载这些数据。您可以检查read.keys()中的onlu
if name():
,然后更改
read[name][“score”]中的值,而不是键的
,然后打开文件再次写入所有数据。我不确定,但您应该检查
obj
-也许您已经单击了
obj
中的按钮,并且您不必使用
for child
循环来为所有子级运行代码。感谢您删除了子循环!
    def add_score(self, obj):
        name = obj.text

        with open("streak.json", "r") as file:
            read = json.load(file)

        for key in read.keys():
            if key == name:
                with open("streak.json", "r+") as f:
                    data = json.load(f)
                    data[key]['score']+=1
                    f.seek(0)
                    json.dump(data, f, indent=4)
                    f.truncate()