每次从JSON数据中提取时,我都会得到TypeError: unhashable type: 'dict'
我的json信息
u 'paging': {
u 'cursors': {
u 'after': u 'MTQyNzMzMjE3MDgxNzUzOQZDZD', u 'before': u 'OTUzNDg3MjMxMzQ2NjQ0'
}
}, u 'data': [{
u 'access_token': u 'XXXXX',
u 'category': u 'Internet/Software', u 'perms': [u 'ADMINISTER',
u 'EDIT_PROFILE', u 'CREATE_CONTENT', u 'MODERATE_CONTENT',
u 'CREATE_ADS', u 'BASIC_ADMIN'
], u 'name': u 'Nurdin Norazan Services', u 'id': u '953487231346644'
}, {
u 'access_token': u 'XXXXX',
u 'category': u 'Internet/Software', u 'perms': [u 'ADMINISTER',
u 'EDIT_PROFILE', u 'CREATE_CONTENT', u 'MODERATE_CONTENT',
u 'CREATE_ADS', u 'BASIC_ADMIN'
], u 'name': u 'Intellij System Solution Sdn. Bhd.', u 'id': u '433616770180650'
}]
}
我的代码
data = json.load(urllib2.urlopen("https://graph.facebook.com/v2.7/me/accounts?access_token="XXXXX")
print (data[data][0][id]) //953487231346644
顺便提一下,如何打印循环数据?
答案 0 :(得分:1)
你的问题不在于“提取”数据:这是你的print语句,因为完整的回溯会显示出来。
出于某种原因,在该声明中,您致电data[data]
。但这只是意味着你试图用自己索引数据字典。要获取数据键,您需要使用字符串:data["data"]
;和id值相同。
print(data["data"][0]["id"])
答案 1 :(得分:0)
根据文档,json.load
用于读取文件指针(或实现read()
接口的某个对象)。
https://docs.python.org/2.7/library/json.html#json.load
我说你想要json.loads
,但事实上你想要json.dumps
。你的TypeError暗示你进入python字典(非常类似于JSON),而json.load / s需要一个字符串。
>>> import json
>>> json.dumps({"foo": "bar"})
'{"foo": "bar"}'
>>> json.loads({"foo": "bar"})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python3.4/json/__init__.py", line 312, in loads
s.__class__.__name__))
TypeError: the JSON object must be str, not 'dict'
>>> json.loads(json.dumps({"foo": "bar"}))
{'foo': 'bar'}
至于循环数据,迭代它:
for key, val in data.items():
print("{}: {}".format(key, val))
如果你想以递归方式遍历json,你可能必须实现一些更高级的循环。
答案 2 :(得分:0)
我得到了答案
data = json.load(urllib2.urlopen("https://graph.facebook.com/v2.7/me/accounts?access_token="XXXXX")
for i in data['data']:
print i['id']