【问题标题】:Python JSON TypeError: list indices must be integers or slices, not strPython JSON TypeError:列表索引必须是整数或切片,而不是str
【发布时间】:2020-05-02 04:14:35
【问题描述】:

我目前正在尝试从 get 请求响应中解析一些数据,但一直收到此错误:“TypeError: list indices must be integers or slices, not str”

如果有人能帮助我解决我想要解决的问题,那就太好了。非常感谢您。

import requests
import json


class userList(APIView):
    def get(self,request,format=None):

        user_data = []
        url = 'https://reqres.in/api/users?page=1'

        try:
            r = requests.get(url).json()
            user = {
                'id': r['data']['id'],
                'email': r['data']['email']
            }
            user_data.append(user)
            return Response({"user_data":user_data}, status=status.HTTP_200_OK)


{
data:{

0:{
'id'    : 1
'email' :   "george.bluth@reqres.in"
'first_name' :  "George"
'last_name' :   "Bluth"
'avatar' :  "https://s3.amazonaws.com/uifaces/faces/twitter/calebogden/128.jpg"
}

1:{
'id'    : 2
'email' :   "apdas@reqres.in"
'first_name' :  "apdas"
'last_name' :   "loanz"
'avatar' :  "https://s3.amazonaws.com/uifaces/faces/twitter/calebogden/128.jpg"
}

2:{
'id'    : 3
'email' :   "joan@reqres.in"
'first_name' :  "joan"
'last_name' :   "homli"
'avatar' :  "https://s3.amazonaws.com/uifaces/faces/twitter/calebogden/128.jpg"
}
}
}

【问题讨论】:

  • 能否请您发布回溯?
  • 数据是列表的字典吗?将每个 x[y] 分开到它自己的行中,这样你就可以看到导致错误的原因,我怀疑你需要 r[0]['data']['id']
  • 回溯中标记了哪一行。 (您应该在问题中包含回溯。)
  • 检查r['data'] 并检查它是否有list 而不是dict。在这里快速浏览一下您的 json 内容,我认为正确的是使用 r['data'][someIndex]['id'] 例如。你应该使用类似r['data'][0]['id']
  • 我得到一个值。如果有多个结果,是否可以迭代结果而不是添加 [0]。 @GeekSilva

标签: python json


【解决方案1】:

试试这个:

user_data = [{'id': x['id'], 'email': x['email']} for x in r['data']]

输出:

[{'id': 1, 'email': 'george.bluth@reqres.in'}, {'id': 2, 'email': 'apdas@reqres.in'}, {'id': 3, 'email': 'joan@reqres.in'}]

【讨论】:

  • TypeError: 列表索引必须是整数或切片,而不是字典
  • 这里,对于 x in r['data']
  • 我没明白你的意思
  • @xxnora 您发布的 json 与您从 url 获取的 json 不同
猜你喜欢
  • 2017-11-19
  • 2021-01-07
  • 1970-01-01
  • 2020-05-14
  • 2020-11-21
  • 2017-10-08
  • 1970-01-01
  • 2015-12-09
  • 2021-11-28
相关资源
最近更新 更多