如何迭代自定义obj的属性名称

2024-10-04 09:29:07 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我在python代码中有一个JSON对象,我在代码中使用它们作为对象。它的类型是JSONHelper.X,这是我编写的一个自定义类,用于读取json文件并将其转换为对象以便于使用

{
   "Gui":{
      "Images":{
         "Logo1":"url1",
         "Logo2":"url2",
         "Logo3":"url3",
         "Logo4":"url4",
         "Logo5":"url5"
      }
   }
}

如何从该对象检索属性名和值对,以提供另一个类作为参数。JSONHelper对象似乎没有dict属性,所以我不能说Gui.Images.keys()。当我打印Gui.Images时,我只得到值

我可以访问如下属性名称。有没有更好的办法

    def prop_names(self):
            l = []
            public_props = (name for name in dir(self.settings.Images) if not name.startswith('_'))
            for name in public_props:
                if name is not "count" and name is not "index":
                    print(name)
            print(l
)
output: 
Logo1
Logo2
Logo3
Logo4
Logo5

Tags: 对象代码nameself属性notguipublic
1条回答
网友
1楼 · 发布于 2024-10-04 09:29:07

使用JSON.load将JSON助手字符串转换为字典(请参阅Barmar的注释)。从那里,您可以访问所需的键值

import json
import itertools

j="""{
   "Gui":{
      "Images":{
         "Logo1":"url1",
         "Logo2":"url2",
         "Logo3":"url3",
         "Logo4":"url4",
         "Logo5":"url5"
      }
   }
}""" 
d = json.loads(j)
l = [list(d[k1][k2].keys()) for k1 in d.keys() for k2 in d[k1].keys()]
print(list(itertools.chain.from_iterable(l)))

结果:

['Logo1', 'Logo2', 'Logo3', 'Logo4', 'Logo5']

相关问题 更多 >