Python脚本调用API获取数据遇TypeError错误求助
问题原因及解决建议
问题原因
你遇到的TypeError: string indices must be integers, not 'str'错误核心原因很明确:
response.text返回的是原始字符串格式的响应内容,并非Python可直接用字符串索引访问的字典/列表对象。- 本地读取JSON文件的脚本能正常运行,是因为
json.load()已经把文件内容解析成了Python的字典/列表对象,而从API获取的内容还停留在字符串阶段,自然无法用字符串键值索引。
解决步骤
方法1:用requests内置的JSON解析方法(推荐)
requests库自带response.json()方法,可直接将合法的JSON响应解析为Python字典/列表,替换你原本使用response.text的代码即可:
import requests # 发起带身份验证的请求(根据你的实际验证方式调整参数) response = requests.get("你的API地址", auth=("用户名", "密码")) # 直接解析响应为Python对象 data = response.json() # 现在可正常访问JSON结构 computers = data["advanced_computer_search"]["computers"]
方法2:手动用json模块解析字符串
如果一定要保留response.text的使用,需通过json.loads()将字符串转换为Python对象:
import requests import json response = requests.get("你的API地址", auth=("用户名", "密码")) # 将字符串格式的响应解析为Python对象 data = json.loads(response.text) computers = data["advanced_computer_search"]["computers"]
额外排查要点
- 先检查响应状态码:用
print(response.status_code)确认是否返回200(请求成功)。如果是401、403这类状态码,说明身份验证失败,API可能返回HTML错误页面而非JSON,自然无法解析。 - 打印
response.text查看实际内容:如果返回的不是标准JSON格式(比如包含HTML标签、错误提示文本),需先排查API请求的参数、身份验证是否正确,确保API确实返回合法的JSON数据。
内容的提问来源于stack exchange,提问作者Israel Padilla
相关产品推荐
相关产品推荐

