如何遍历自定义对象的属性名称

时间:2019-05-08 17:09:35

标签: 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

1 个答案:

答案 0 :(得分:0)

使用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']