Ansible中json_query未返回预期结果的问题排查
问题修复方案
1. 修正JSON数据结构
你的原始JSON存在语法错误:data字段是对象({}),但内部直接放置数组([]),不符合JSON规范(对象必须是键值对集合)。正确的结构应该将data直接设为数组:
{ "data": [ { "name": "myname", "id": 1 }, { "name": "myname2", "id": 2 }, { "name": "myname3", "id": 3 } ] }
2. 修正Ansible任务代码
你的任务存在3个问题:任务名称缺失、表达式未闭合、多余的to_json过滤器。修复后的代码如下:
- name: 查询name为myname3的元素 debug: msg: "{{ test_json | json_query('data[?name==`myname3`]') }}"
关键说明:
- 移除
to_json过滤器:json_query模块直接作用于Ansible已加载的Python数据结构(字典/列表),无需先转为JSON字符串。 - 字符串转义:使用反引号(
)包裹查询值,避免Jinja2模板的单引号嵌套冲突;也可以用双引号包裹整个json_query表达式,内部用单引号:json_query("data[?name=='myname3']")`。 - 语法补全:补全任务名称和表达式末尾的闭合括号
}}。
效果验证
修复后执行任务,debug模块会输出:
ok: [localhost] => { "msg": [ { "id": 3, "name": "myname3" } ] }
内容的提问来源于stack exchange,提问作者user3472
相关产品推荐
相关产品推荐

