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
相关产品推荐
相关产品推荐

