gpt4 book ai didi

python - 类型错误 : string indices must be integers error when parsing Json with Python

转载 作者:太空宇宙 更新时间:2023-11-03 12:37:38 24 4
gpt4 key购买 nike

在你自己判断和思考“我已经看过这个问题一千遍了”之前,请继续阅读并给我一个机会,我已经在互联网上搜索了答案,但似乎找不到任何帮助。

所以我试图从我使用以下代码获得的 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'
},

这是[items, links, self]数据

如果我使用以下代码尝试访问它:

for each in data['items']['links']:
print(each['self'])

我收到以下错误:

  File "<stdin>", line 1, in <module>
TypeError: list indices must be integers or slices, not str

如果我尝试使用以下代码访问它:

for each in data['items'][0]['links']:
print(each['self'])

我收到这个错误:

  File "<stdin>", line 2, in <module>
TypeError: string indices must be integers

我只是不明白为什么它向我抛出这个错误,互联网上的所有其他响应都指向一个事实,即我正在尝试解析一个字符串而不是一个实际的 json 对象,但是每当我运行命令时:

type(data)

它返回:

<class 'dict'>

所以我知道它是一个字典,它应该能够遍历键。

我确定我犯了一个非常愚蠢的错误,如果是这样,我深表歉意,但我无法弄清楚我做错了什么,有人可以帮忙吗?

附注很抱歉发了这么长的帖子。

编辑:

非常感谢您的所有回复,现在一切似乎都明白了。我们都曾经是学习者! :)

最佳答案

'links' 键指向字典值,因此迭代它会得到字典的键,在本例中为 'self'。你应该这样做:

for k, v in data['items'][0]['links'].items():
if k == 'self':
print(v)

或者您可以简单地访问键 'self' 的值而无需迭代:

print(data['items'][0]['links']['self'])

关于python - 类型错误 : string indices must be integers error when parsing Json with Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41836011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com