【问题标题】:Why are all my values being updated in my json file?为什么我的所有值都在我的 json 文件中更新?
【发布时间】:2019-05-19 00:16:12
【问题描述】:

我有一个按钮列表,当按下这些按钮时,将值 1 添加到 score。该按钮被视为screen_two.ids.streak_zone 的子级。当我按下按钮时,它会更新 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
    }
}

【问题讨论】:

  • 您运行for child 循环,以便为所有按钮执行此操作。也许在某些地方添加print() 以查看您在变量中的内容以及执行了哪部分代码。
  • 我不知道如果你已经在变量read 中加载了相同的数据,为什么还要第二次加载它。代替for key循环,您可以检查onlu if name in read.keys():,然后更改read[name]["score"]中的值,然后打开文件再次写入所有数据。
  • 我不确定,但你应该检查obj - 也许你已经点击了obj 中的按钮并且你不必使用for child 循环来为所有孩子运行你的代码。
  • 感谢删除子循环有效!

标签: python json kivy


【解决方案1】:

删除子循环并制作name = obj.text

代码:

    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()

【讨论】:

    猜你喜欢
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多