Ansible提取JSON字段报错'list object' has no attribute 'name'问题咨询
错误原因
你返回的JSON结构中,model_image_response.json.models 是数组类型(用方括号[]包裹),数组本身没有name属性,直接调用models.name自然会抛出'list object' has no attribute 'name'错误。
修复方案
场景1:models数组仅存1个元素(和你提供的示例结构一致)
先取数组第一个元素,再访问name字段拆分即可,修改后的代码如下:
- name: set model ID set_fact: model_id: "{{ model_image_response.json.models[0].name.split('/')[-1] }}"
说明:这里使用
split('/')[-1]替代你之前写的split('/')[5]兼容性更强,只要ID是路径的最后一段,哪怕后续路径层级发生变化也能正常提取。
场景2:models数组存在多个元素,需要批量提取所有ID
可以使用Ansible的map过滤器批量处理:
- name: 批量提取所有model ID set_fact: model_id_list: "{{ model_image_response.json.models | map(attribute='name') | map('split', '/') | map('last') | list }}"
调试校验
如果拿不准结构,可以先加debug任务打印变量确认取值逻辑:
- name: 打印models结构 debug: var: model_image_response.json.models
内容的提问来源于stack exchange,提问作者quicksilver
相关产品推荐
相关产品推荐

