You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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数组:

  1. 先遍历外层items的每个元素
  2. 再遍历每个外层元素内部的items数组,从中提取imageName
  3. 建议使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 21:43:15