如何用Python从嵌套JSON提取imageName?解决KeyError问题
解决提取JSON嵌套结构中
imageName字段的KeyError问题 问题描述
需要从嵌套结构的JSON响应中提取imageName字段的值(items数组可能包含多个元素),但运行代码时出现KeyError: 'imageName',请求修正代码以正确获取数据。
JSON响应示例
{ "RecommendSoftwareImageTypeDTOList": { "id": "imageReferenceType", "items": [ { "id": "imageFileName", "imageReferenceName": "RELEASE", "imageReferenceType": "SYSTEM_SW", "items": [ { "deviceId": 74519445, "deviceName": "kyc4200-120.20.20", "features": "NA", "imageChecksums": "fedc49ad67ae66702d55fcce51439b06", "imageFamily": "kyc4200", "imageFileName": "kyc4202-universalk9.17.09.02a.SPA.bin", "imageName": "kyc4202-universalk9.17.09.02a.SPA.bin", "imageType": "RELEASE", "inRepository": "Yes", "ipAddress": "10.104.120.20", "result": "Success", "size": 536558675, "version": "17.09.02" } ], "resultErrMsg": "", "totalCount": 1 } ], "totalCount": 1 } }
当前错误代码
if response.status_code == 200: if "RecommendSoftwareImageTypeDTOList" in response.text: if "items" in response.text: image_data = response.json() image_list = image_data['RecommendSoftwareImageTypeDTOList'] image_list = image_list['items'] for i in image_list: inactive_images.append(i['imageName']) print(active_images)
报错信息
响应状态码: 200 错误信息: 'imageName' 跟踪回溯 (最近调用最后): 文件 "/tyu_suite.py", 第189行, 位于 Get_xe_images_api 函数中 inactive_images.append(i['imageName']) KeyError: 'imageName'
问题原因
当前代码仅遍历了第一层items数组,但imageName字段存在于第二层嵌套的items数组中。第一层items的元素是包含id、imageReferenceName等字段的对象,该对象自身还包含一个items数组,目标字段就在这个子数组的元素里。
修正方案
需要嵌套遍历两层items数组:
- 先遍历外层
items的每个元素 - 再遍历每个外层元素内部的
items数组,从中提取imageName - 建议使用
dict.get()方法替代直接索引,避免因字段缺失导致的KeyError
修正后的代码
if response.status_code == 200: image_data = response.json() # 直接通过键访问,无需先检查字符串是否存在(json解析后结构明确) recommend_list = image_data.get('RecommendSoftwareImageTypeDTOList', {}) outer_items = recommend_list.get('items', []) for outer_item in outer_items: # 获取内层items数组,默认空列表避免报错 inner_items = outer_item.get('items', []) for inner_item in inner_items: # 提取imageName,不存在则返回None(可根据需求调整默认值) image_name = inner_item.get('imageName') if image_name: inactive_images.append(image_name) # 遍历完成后再打印结果,避免重复输出 print(inactive_images)
内容的提问来源于stack exchange,提问作者mac
相关产品推荐
相关产品推荐

