Python提取嵌套JSON中episodes下的scene_id时报KeyError的解决
代码问题排查与scene_id提取实现
原代码触发KeyError的核心原因
- 遍历范围错误:
json.load(f)返回的是根字典,直接执行for i in data遍历,仅能拿到根字典的键(即字符串"episodes"),完全没有进入episodes对应的数组层级。 - 字段访问层级错误:根字典仅包含
episodes一个顶级键,不存在scene_id字段,直接执行data['scene_id']必然抛出KeyError。 - 循环逻辑无效:循环体中始终访问外层根字典对象,没有用到循环变量的值,即使调整遍历范围也无法获取数组内部的字段。
- 文件操作不严谨:手动调用open/close的方式没有异常适配,读取过程中如果触发报错,会导致文件句柄无法正常释放。
正确实现逻辑
按照给定的JSON结构,需要先定位到episodes对应的数组,再遍历数组内的每个episode对象提取scene_id,可运行代码如下:
import json # 用上下文管理器处理文件读取,自动完成资源回收 with open('val.json', 'r', encoding='utf-8') as f: json_root = json.load(f) all_scene_ids = [] # 遍历episodes数组中的每个元素 for episode in json_root['episodes']: current_scene_id = episode['scene_id'] all_scene_ids.append(current_scene_id) print(current_scene_id)
精简写法可通过列表推导式一次性完成字段提取:
all_scene_ids = [ep['scene_id'] for ep in json.load(open('val.json', encoding='utf-8'))['episodes']]
内容的提问来源于stack exchange,提问作者Augustin Laurent
相关产品推荐
相关产品推荐

