如何在JsonStore Kivy应用程序中循环获取值?

时间:2019-04-22 15:27:11

标签: python kivy jsonstore

我一直在努力寻找一种使用JsonStore模块在多个对象中迭代一组特定值的方法。我的代码:

class MainApp(App):

    def build(self): # build() returns an instance
        self.store = JsonStore("streak.json") # file that stores the streaks:


        return presentation

    def check_streak(self, instance):



        for value in self.store.find('delta'):

            if value > time.time():
                print("early")

            if value == time.time():
                print("on time")

            if value < time.time():
                print("late")

此功能连接到页面上显示的不同按钮:

def display_btn(self):
        # display the names of the streaks in a list on PageTwo
        for key in self.store:
            streak_button = Button(text=key, on_press=self.check_streak)
            self.root.screen_two.ids.streak_zone.add_widget(streak_button)

使用check_streak时,我得到TypeError: find() takes 1 positional argument but 2 were given

json文件内部是什么

{"first": {"action": "first", "action_num": "1", "seconds": 60, "score": 0, "delta": 1555714261.0438898}, "second": {"action": "second", "action_num": "2", "seconds": 120, "score": 0, "delta": 1555879741.894656}}

请注意,每个对象都以其名称开头,在这种情况下为“第一个”和“第二个”。我希望能够遍历每个对象的“增量”键并获取其值。一旦获得该对象“增量”的值,便会将其与当前时间进行比较。

我被提到一个涉及生成ID的问题,但我看不到它与我的问题有什么关系。尽管我认为生成器非常适合创建随机数,但是我使用的数据不是随机的。如果使用生成器是执行我要执行的操作的唯一方法,可以有人告诉我如何在代码中使用它吗?

我先前收到的答案并不能说明我希望将“ delta”值仍附加到对象而不是仅仅列出它们的事实。

1 个答案:

答案 0 :(得分:0)

如何使用recursive iteration through nested json for specific key in python

以下示例不使用JsonStore。它正在使用json.load加载JSON对象。

摘要

import json
...
    def check_streak(self, *args):
        with open("streak.json", "r") as read_file:
            data = json.load(read_file)

            for honey in item_generator(data, 'delta'):
                print(f"honey={honey}")
                print(f"type(honey)={type(honey)}")

                if honey > time.time():
                    print("early")  # test

                if honey == time.time():
                    print("on time")

                if honey < time.time():
                    print("late")

注意

由于store.find(key='value')不固定或恒定,因此无法使用delta函数。它不像name='kivy'