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

Ansible解析JSON返回undefined值 提取metrics字段异常排查

问题根因
  • 过滤到param层级时,你拿到的是二维嵌套列表:外层列表的元素是子列表,每个子列表内部才是存了metrics1/metrics2/metrics3字段的字典对象。列表本身没有metrics2属性,直接调用map(attribute='metrics2')自然会返回AnsibleUndefined。
  • 另外你贴的示例JSON里前4个字典的键值对缺失逗号分隔(比如"metrics2": "B"后直接跟"metrics3": "C"),先确认实际接口返回的JSON语法合规,否则JSON解析阶段就会抛出异常。
修正代码

单独提取metrics2字段

先把嵌套的二维列表拍平为一维字典列表,再提取目标字段即可:

parseJSON: "{{ JSONcontent['results'] | map(attribute='json.item.param') | flatten | map(attribute='metrics2') | list }}"

执行后返回结果为:['B', 'E', 'H', 'K', 'N', 'Q']

提取两列数据生成表格

如果要直接拿到适配两列表格的数据源(metrics2为第一列、metrics3为第二列),用zip把两个字段的提取结果按位置配对即可:

table_data: "{{ JSONcontent['results'] | map(attribute='json.item.param') | flatten | map(attribute='metrics2') | zip(JSONcontent['results'] | map(attribute='json.item.param') | flatten | map(attribute='metrics3')) | list }}"

返回的table_data每一项都是一个二元组,直接传入表格渲染组件即可生成如下结果:

metrics2值metrics3值
BC
EF
HI
KL
NO
QR
逻辑说明
  • 链式属性提取:map(attribute='json.item.param')可以直接跨多层级取属性,不需要多次调用map逐层写
  • 列表拍平:flatten过滤器会把两层嵌套的param列表展开,得到一维的、由指标字典组成的列表,后续就可以正常提取字典属性
  • 字段配对:zip过滤器会把两个等长列表按下标一一对应,生成表格行结构

内容的提问来源于stack exchange,提问作者asking

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:39:19