无法迭代我自己的对象

时间:2014-08-08 02:20:41

标签: python json

我是Python的新手,无法解决这个问题。我正在尝试使用json Feed创建一个对象。我试图基本上为每个属性的json fed中的每个项目制作一个字典。我得到的错误是TypeError: 'mediaObj' object is not subscriptable或不是iterable

对于奖励积分,阵列也有许多子词典。我想要的是能够访问嵌套数据。

这是我的代码:

url = jsonfeedwithalotofdata.com
data = urllib.request.urlopen(url)
data = instagramData.read()
data = instagramData.decode('utf-8')
data = json.loads(data)
media = data['data']

class mediaObj:
    def __init__(self, item):
        for key in item:
            setattr(self, key, item[key])
            print(self[key])

    def run(self):
        return self['id']

for item in media:
    mediaPiece = mediaObj(item)

这将来自json Feed,其外观如下(因此数据是&#34之后的数组;数据"):

"data": [
{
"attribution": null,
"videos": {},
"tags": [],
"type": "video",
"location": null,
"comments": {},
"filter": "Normal",
"created_time": "1407423448461",
"link": "http://instagram.com/p/rabdfdIw9L7D-/",
"likes": {},
"images": {},
"users_in_photo": [],
"caption": {},
"user_has_liked": true,
"id": "782056834879232959294_1051813051",
"user": {}
}

所以我的希望是我可以为数组中的每个项创建一个对象,然后我可以说:

print(mediaPiece['id'])

甚至更好

print(mediaPiece['comments'])

查看评论列表。万分感谢

1 个答案:

答案 0 :(得分:0)

您遇到问题是因为您使用属性存储数据项,但使用列表/字典查找语法尝试检索它们。

使用print(self[key])代替print(getattr(self, key))而不是return self['id']使用return self.id