调用breachdirectory API给data变量赋值时报错string indices must be integers
问题修复方案
错误原因
你代码中的核心问题是对JSON解析结果做了多余的字符串转换:
- 执行
json.loads(response.text)后,返回结果已经是Python原生的字典/列表类型,可以直接用键名/下标访问数据 - 你额外用
str()包裹了解析结果,把结构化的字典/列表强行转成了普通字符串,字符串只能用整数下标访问单个字符,后续如果用['xxx']这样的键名访问自然会抛出string indices must be integers报错。
另外你代码中用input作为变量名,会覆盖Python内置的input()函数,属于不规范写法也建议修改。
修正后代码
import requests import json # 替换变量名,避免覆盖内置函数 user_input = input("put you data here: ") url = "https://breachdirectory.p.rapidapi.com/" querystring = {"func":"auto","term":user_input} headers = { 'x-rapidapi-host': "breachdirectory.p.rapidapi.com", 'x-rapidapi-key': "cdc2ac9cf2msh13a3dv713de3c61p1185f5jsncd225a72c5e1" } response = requests.request("GET", url, headers=headers, params=querystring) print(response.text) # 去掉多余的str()转换,直接保留结构化数据 data = json.loads(response.text) print('this is data value', data) # 现在可正常用键名访问数据,例如 data['result']
注意事项
如果需要把data转成字符串做输出、存储等操作,不要在赋值给data的时候转换,应该在需要字符串格式的场景临时转换,避免破坏结构化数据的可访问性。
内容的提问来源于stack exchange,提问作者Luis Pereira
相关产品推荐
相关产品推荐

