Python统计API返回JSON中clusterInventoryStackDTO元素数量报错求助
统计JSON数组元素数量解决方案
问题根因定位
出现KeyError通常是以下两类原因:
- 实际解析后的字典中
clusterInventoryStackDTO字段名和你写的存在差异(比如大小写拼写偏差、前后带不可见空格、API返回字段名存在变体) - 部分API的序列化规则会在数组只有1个元素时,自动把数组结构转为单个对象,甚至在没有元素时不返回该字段
排查步骤
- 先打印
mgmtResponse下的所有键,确认字段是否存在、名称是否完全匹配:
print(stackResult["mgmtResponse"].keys())
- 确认目标字段的类型:
target = stackResult["mgmtResponse"].get("clusterInventoryStackDTO") print(type(target))
兼容统计代码
可以直接用以下代码兼容各种场景,规避KeyError同时得到正确数量:
target_data = stackResult["mgmtResponse"].get("clusterInventoryStackDTO") if target_data is None: # 字段不存在时数量为0 stack_count = 0 elif isinstance(target_data, list): # 正常数组场景直接统计长度 stack_count = len(target_data) else: # 单元素被转为对象的场景,数量为1 stack_count = 1 print(stack_count)
如果你已经可以通过JSONPath正常获取到目标对象,直接对JSONPath返回的匹配结果执行len()操作即可,注意部分JSONPath库会把匹配结果外层包裹一层数组,需要先取出目标数组再统计长度。
内容的提问来源于stack exchange,提问作者hjacquemin
相关产品推荐
相关产品推荐

