如何遍历多个 json 字典来检查相同类型键的值?

2022-01-15 00:00:00 python kivy json

问题描述

我希望能够在多个 json 字典中获取delta"的值.如果有任何改变,我正在使用来自 kivy 的 JsonStore.当我按下启动 check_streak 函数的按钮时,我得到 NameError: name 'delta' is not defined.代码如下:

I want to be able to get the value of "delta" in multiple json dictionaries. I'm using JsonStore from kivy if that changes anything. When I press the button that starts the check_streak function I get NameError: name 'delta' is not defined. Here is the code:

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 item in self.store.find(delta):

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

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

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

这是一个单独文件中的 json 字典:

Here is the json dictionary in a seperate file:

{"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}}

我希望能够从文件中的每个对象中获取delta"的值.我该怎么做?

I want to be able to get the value of "delta" from every object put inside the file. How would I do this?


解决方案

这个问题可以用item generator来得到'delta'的值.代码如下:

This question can be solved with an item generator to get the value of 'delta'. Here is the code:

class MainApp(App):

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


        return presentation

    # Gets the value of delta (code I may never understand lol)
    def item_generator(self, json_input, lookup_key):
        if isinstance(json_input, dict):
            for k, v in json_input.items():
                if k == lookup_key:
                    yield v
                else:
                    yield from self.item_generator(v, lookup_key)
        elif isinstance(json_input, list):
            for item in json_input:
                yield from self.item_generator(item, lookup_key)

    def check_streak(self, instance):
        with open("streak.json", "r") as read_file:
            data = json.load(read_file)
            values = self.item_generator(data, 'delta')



        for honey in values:
            if honey > time.time():
                print("early")

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

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

相关文章