Python解析JSON代码报错:如何提取resourcePermission的permissions字段
解决Python提取JSON中permissions字段的TypeError问题
首先,咱们来拆解你遇到的错误根源:
role_list_json是一个列表(对应JSON里的resourcePermission数组),所以直接用role_list_json["permissions"]会触发TypeError——列表只能用整数索引定位元素,不能用字符串。- 你的代码里
role_list_json["permissions"]["k"]还有两个明显问题:一是变量k不能放在引号里,二是你跳过了列表元素的索引步骤(得先拿到数组里的单个字典条目,才能提取permissions)。
下面是修正后的代码,帮你实现按索引提取permissions并写入worksheet的需求:
import json # 解析JSON数据(假设response1.text是你的原始响应内容) role_data = json.loads(response1.text) # 直接通过key获取resourcePermission列表,比用values()[0]更直观清晰 role_entries = role_data["resourcePermission"] # 假设你从第0行开始写入表格,可根据实际情况调整 current_row = 0 # 遍历每个权限条目 for entry in role_entries: # 取出当前条目的permissions列表 permissions = entry["permissions"] # 从第2列开始写入 current_col = 2 # 按索引遍历permissions,依次写入单元格 for idx, perm in enumerate(permissions): worksheet.write(current_row, current_col + idx, perm) # 处理完一个条目,行号+1 current_row += 1
如果你需要严格按照k[0]=put、k[1]=get、k[2]=delete的形式单独提取(同时避免索引越界,因为有的条目只有get权限),可以用下面的写法做防护:
import json role_data = json.loads(response1.text) role_entries = role_data["resourcePermission"] current_row = 0 for entry in role_entries: perms = entry["permissions"] # 按索引提取,用None处理权限不足的情况,避免IndexError put_perm = perms[0] if len(perms) >= 1 else None get_perm = perms[1] if len(perms) >= 2 else None delete_perm = perms[2] if len(perms) >= 3 else None # 写入表格对应列 worksheet.write(current_row, 2, put_perm) worksheet.write(current_row, 3, get_perm) worksheet.write(current_row, 4, delete_perm) current_row += 1
最后补充几个你代码里的关键优化点:
- 用
role_data["resourcePermission"]替代list(role_data.values())[0]:前者可读性更强,不会因为JSON结构变化导致取值错误。 - 替换
while k <1的循环逻辑:你需要遍历所有权限条目,用for循环更贴合需求。 - 增加索引越界防护:不是所有条目都有3种权限,取索引前判断列表长度,避免崩溃。
内容的提问来源于stack exchange,提问作者A. Datta
相关产品推荐
相关产品推荐

