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

如何用json_query过滤JSON文件中指定GroupName对应的EntryTitle

Ansible 使用 json_query 过滤指定 GroupName 对应的 EntryTitle

问题分析

你的JSON数据顶层是键值对结构,直接用*.GroupName只能提取所有分组名,但无法实现过滤指定Group并关联EntryTitle的需求。需要先将顶层对象的所有值转换为数组,再进行条件过滤。

修正后的Ansible Playbook

- name: 加载JSON数据
  set_fact:
    jsondata: "{{ lookup('file', 'entries.json') | from_json }}"

- name: 筛选TEST2对应的EntryTitle
  set_fact:
    servername: "{{ jsondata | json_query(jq_filter) }}"
  vars:
    jq_filter: "[*] | [?GroupName == 'TEST2'].EntryTitle"

- name: 打印结果
  debug:
    msg: "匹配的EntryTitle: {{ servername[0] }}"

关键说明

  1. 数据格式转换:[*]将顶层对象的所有值转为数组,让json_query可以对元素进行遍历和过滤。
  2. 条件过滤:[?GroupName == 'TEST2']筛选出数组中GroupName等于TEST2的元素。
  3. 提取目标字段:.EntryTitle从过滤后的元素中提取需要的EntryTitle值。
  4. 结果处理:过滤后返回的是数组,用servername[0]直接获取唯一匹配的结果(若有多个匹配可循环遍历)。

替代方案(无需json_query)

如果不想依赖json_query,也可以用Ansible原生过滤器实现:

- name: 用原生过滤器提取目标值
  set_fact:
    servername: "{{ jsondata | dict2items | selectattr('value.GroupName', 'equalto', 'TEST2') | map(attribute='value.EntryTitle') | first }}"

- name: 打印结果
  debug:
    msg: "{{ servername }}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 10:00:23