我是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'])
查看评论列表。万分感谢
答案 0 :(得分:0)
您遇到问题是因为您使用属性存储数据项,但使用列表/字典查找语法尝试检索它们。
使用print(self[key])
代替print(getattr(self, key))
而不是return self['id']
使用return self.id
。