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

Ansible如何从键名不固定(后缀为Diff)的JSON中提取path值

实现方案

你可以通过Jinja2自带的字典处理过滤器,筛选出以Diff为后缀的动态键,两种常用的实现方式如下:

方式一:原生Jinja2过滤器实现(无额外依赖)

直接修改你的debug任务代码即可:

- name: 提取Diff节点下的path字段值
  debug:
    msg: >-
      {% set trace_root = atc_AS3_status.msg.json.traces.values() | first %}
      {% set diff_node = trace_root | dict2items | selectattr('key', 'search', 'Diff$') | map(attribute='value') | first %}
      {{ diff_node | map(attribute='path') | list }}

如果traces下可能存在多个xxxCurrent类的根键,把代码中的first替换为循环遍历逻辑即可适配。

方式二:json_query实现(需要提前安装jmespath依赖)

如果你的Ansible运行环境已经安装了jmespath库,可以用更简洁的查询语法:

- name: 通过json_query提取path值
  debug:
    msg: "{{ atc_AS3_status.msg.json.traces | json_query('*.*[?ends_with(key, `Diff`)].value[] | [].path') }}"

逻辑说明

  • 两种方案都通过匹配Diff$后缀定位动态键,不受前缀变化的影响
  • 最终输出为所有匹配到的Diff节点下的path字段值列表,兼容单个/多个Diff节点的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:45:05