在你判断和思考自己之前'我已经看过这个问题一千次了'请继续阅读并给我一个机会,我已经在互联网上寻找答案,但似乎无法找到任何帮助.
所以我试图从我使用以下代码获得的API解析json:
url = 'https://api.companieshouse.gov.uk/company/' + companyno + '/charges' r = requests.get(url, auth=('API KEY', '')) data = r.json()
我可以很容易地从json获取特定值,例如使用以下代码:
for each in data['items']: print(each['created_on'])
返回:
2016-11-08 2016-11-08 2016-11-08 2015-03-27 2015-03-27 2015-03-27 2015-03-27 2015-03-27 2007-10-10 2007-09-28 2007-09-19
这正是我想要的,它适用于其他键.
然而,有一点json,我似乎无法访问,我有点编辑json,以避免发布敏感数据(无论如何公众可以获得,但只是为了谨慎)但它基本上没有变化:
{ 'items':[ { 'created_on':'2016-11-08', 'etag':'DELETED', 'classification':{ 'type':'charge-description', 'description':'A registered charge' }, 'particulars':{ 'contains_negative_pledge':True, 'description':'DELETED', 'type':'brief-description' }, 'transactions':[ { 'links':{ 'filing':'DELETED' }, 'filing_type':'create-charge-with-deed', 'delivered_on':'2016-11-21' } ], 'links':{ 'self':'DELETED' }, 'charge_code':'DELETED', 'delivered_on':'2016-11-21', 'status':'outstanding', 'persons_entitled':[ { 'name':'DELETED' }, { 'name':'DELETED' } ], 'charge_number':59 }, { 'transactions':[ { 'delivered_on':'2016-11-10', 'links':{ 'filing':'DELETED' }, 'filing_type':'create-charge-with-deed' } ], 'particulars':{ 'contains_negative_pledge':True, 'contains_fixed_charge':True, 'floating_charge_covers_all':True, 'contains_floating_charge':True }, 'persons_entitled':[ { 'name':'DELETED' } ], 'charge_number':58, 'status':'outstanding', 'charge_code':'DELETED', 'links':{ 'self':'DELETED' },
它是[项目,链接,自我]数据
如果我使用以下代码尝试访问它:
for each in data['items']['links']: print(each['self'])
我收到以下错误:
File "", line 1, in TypeError: list indices must be integers or slices, not str
如果我尝试使用以下代码访问它:
for each in data['items'][0]['links']: print(each['self'])
我收到此错误:
File "", line 2, in TypeError: string indices must be integers
我只是无法理解为什么它向我抛出这个错误,互联网上的所有其他响应指向我试图解析字符串而不是实际的json对象,但每当我运行命令时:
type(data)
它返回:
所以我知道它是一本字典,它应该能够遍历密钥.
我确定我犯了一个非常愚蠢的错误,如果是这样我道歉但是我无法弄清楚我做错了什么,有人可以帮忙吗?
ps对不起,长篇大论.
编辑:
非常感谢您的所有回复,现在似乎有意义.我们一度都是学习者!:)
该'links'
键指向一个字典值,所以遍历它给你的字典在这种情况下是关键(S)'self'
.你应该做:
for k, v in data['items'][0]['links'].items(): if k == 'self': print(v)
或者您只需访问密钥值即可 'self'
而无需迭代:
print(data['items'][0]['links']['self'])