当前位置:  开发笔记 > 编程语言 > 正文

TypeError:使用Python解析Json时,字符串索引必须是整数错误

如何解决《TypeError:使用Python解析Json时,字符串索引必须是整数错误》经验,为你挑选了1个好方法。

在你判断和思考自己之前'我已经看过这个问题一千次了'请继续阅读并给我一个机会,我已经在互联网上寻找答案,但似乎无法找到任何帮助.

所以我试图从我使用以下代码获得的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对不起,长篇大论.

编辑:

非常感谢您的所有回复,现在似乎有意义.我们一度都是学习者!:)



1> Moses Koledo..:

'links'键指向一个字典值,所以遍历它给你的字典在这种情况下是关键(S)'self'.你应该做:

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

或者您只需访问密钥值即可 'self'而无需迭代:

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

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有