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

Ansible Playbook如何根据指定名称从JSON字典中提取ID并存为变量

错误原因

json_query过滤器要求传入的查询规则是字符串类型,你在TEST任务里直接把[?name=='WebLogic'].id作为参数传入,没有用引号包裹,Jinja2模板引擎会把方括号识别为Jinja语法结构,解析到?时就会触发语法报错。

修正方案

两种可选修正方式:

方式1:直接给查询语句加引号包裹

注意外层用单引号、内层用JMESPath语法的反引号包裹常量,不需要额外转义。如果要提取单个ID值而不是数组,可以在最后加| first过滤:

- name: TEST
  set_fact:
    test: "{{ data.json['values'] | json_query('[?name==`WebLogic`].id') | first }}"

不加| first的话得到的是只有一个元素的ID数组,加了之后直接得到ID字符串,更适合后续任务直接调用。

方式2:和你之前的debug任务逻辑一致,用vars定义查询变量,可复用性更高

- name: TEST
  set_fact:
    test: "{{ data.json['values'] | json_query(query) | first }}"
  vars:
    name: 'WebLogic'
    query: "[?name=='{{ name }}'].id"

修正后test变量就会存储WebLogic对应的ID字符串b37511f4-d4e8-4c77-a628-841dba5c65d8,可直接供后续任务使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:15:00