Python处理JSON报String indices must be integers错,如何取role中John名称
报错原因&修复方案
触发报错的核心问题
- 你将
json.loads()解析得到的Python原生字典,通过json.dumps()转成了格式化字符串后赋值给data。字符串仅支持整数索引取值,传入字符串键值就会抛出String indices must be integers错误。 - 索引路径不符合JSON结构:接口返回的
data是数组(对应Python列表),不是字典,不能直接按data['role']取数,必须先用整数索引拿到列表内的字典元素,再取对应字段。
可直接运行的修复代码
r = requests.request("GET", url, params=payload) # 直接调用requests内置的json方法解析响应,无需手动处理r.text resp_data = r.json() # 按层级取值:data列表第0个条目下的role.name字段 target_role_name = resp_data['data'][0]['role']['name'] print(target_role_name) # 输出为John
操作说明
- 不要混淆
json模块的两个核心方法用途:json.loads():将JSON字符串反序列化为Python可操作的字典/列表,仅在需要手动解析文本响应时使用json.dumps():将Python原生结构序列化为格式化的JSON字符串,仅用于打印调试、文件存储场景,不能用于取值索引
- 如果
data列表包含多条条目,需要筛选所有role.name为John的内容,可使用列表推导式遍历:
# 筛选所有符合条件的role条目 matching_roles = [item['role'] for item in resp_data['data'] if item['role'].get('name') == 'John']
内容的提问来源于stack exchange,提问作者asdfasd sdfasf
相关产品推荐
相关产品推荐

