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

如何使用Ansible的json_query_filter(JMESPath)提取含连字符的JSON键值?

解决Ansible中提取带连字符标签值为列表的问题

我明白你的问题了——当标签键包含连字符时,没法像普通变量那样用点语法访问,而你希望直接生成一个包含所有organization-tag-2对应值的列表,不用在with_items里逐个处理。这其实用Ansible的内置过滤器就能轻松实现,给你两个实用的方案:

方案一:使用map + extract过滤器

extract过滤器支持直接传入带特殊字符的键名字符串,完美适配带连字符的标签键。你可以通过以下方式直接生成目标列表:

- name: 提取所有organization-tag-2的值到列表
  set_fact:
    target_tag_list: "{{ your_tag_data_structure | map('extract', 'organization-tag-2') | list }}"

解释:

  • your_tag_data_structure替换成你实际获取到的标签数据列表(比如从模块返回的结果)
  • map('extract', 'organization-tag-2')会遍历列表中的每个元素,提取出键为organization-tag-2的值
  • 最后用list过滤器把结果转换成标准列表,得到你想要的["value being queried", "value being queried 2"]形式

方案二:使用json_query过滤器

如果你的数据结构更复杂,json_query(依赖jmespath)是更灵活的选择,只需注意用双引号包裹带连字符的键名:

- name: 用json_query提取标签值列表
  set_fact:
    target_tag_list: "{{ your_tag_data_structure | json_query('[*].\"organization-tag-2\"') }}"

解释:

  • [*]表示遍历列表中的所有元素
  • ."organization-tag-2"指定要提取的键(因为键含连字符,必须用双引号包裹)
  • 这个过滤器会直接返回一个包含所有目标值的列表,无需额外转换

额外说明

你之前在with_items里用item["organization-tag-2"]的方式是完全正确的,这是字典键访问的标准写法。而上面的方案本质上是把循环提取的逻辑用Ansible的过滤器封装起来,直接生成你需要的列表,更简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 06:57:10