You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python解析API返回的JSON字典时触发TypeError问题求助

解决Sleeper API用户数据提取的TypeError问题

问题场景

通过requests获取Sleeper API的用户数据,用json.loads将响应转为字典后,尝试提取username和user_id字段添加到user_ids列表时触发报错:

TypeError: string indices must be integers, not 'str'

但直接执行print(user_data["username"])和print(user_data["user_id"])能正常拿到预期结果,user_data是单个用户的字典数据(示例如下):

{'verification': None, 'username': 'zeustrl', 'user_id': '766368574179770368', 'token': None, 'summoner_region': None, 'summoner_name': None, 'solicitable': None, 'real_name': None, 'phone': None, 'pending': None, 'notifications': None, 'metadata': None, 'is_bot': False, 'email': None, 'display_name': 'ZeusTRL', 'deleted': None, 'data_updated': None, 'currencies': None, 'created': None, 'cookies': None, 'avatar': 'f64d0b7a8d0e6fbf0d7856185875d972'}

错误原因

错误代码片段:

for i in user_data:
    user_ids.append({'username': i["username"], 'user_id': i["user_id"]})

当用for i in user_data遍历字典时,i取到的是字典的键名(字符串类型,比如'username'、'user_id'),此时尝试用i["username"]索引字符串,必然触发类型错误——字符串仅支持整数索引,不支持字符串索引。

解决方案

不需要循环遍历字典,直接从user_data中提取指定键值对添加到列表即可。

修正后的完整代码

import requests
import json

user_ids = []

def get_user_id(user):
    get_user_data = requests.get(f"https://api.sleeper.app/v1/user/{user}")
    decode_user_data = get_user_data.content.decode("UTF-8")
    user_data = json.loads(decode_user_data)
    # 直接提取字段添加到列表
    user_ids.append({'username': user_data["username"], 'user_id': user_data["user_id"]})

# 调用示例
get_user_id("zeustrl")
print(user_ids)

简化版代码(利用requests内置的json解析)

可以省去手动解码和json.loads的步骤,直接用response.json()解析响应:

import requests

user_ids = []

def get_user_id(user):
    response = requests.get(f"https://api.sleeper.app/v1/user/{user}")
    user_data = response.json()
    user_ids.append({'username': user_data["username"], 'user_id': user_data["user_id"]})

内容的提问来源于stack exchange,提问作者zeus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 03:42:48