Ansible playbook使用json_query按id查询JSON值返回空数组如何解决
问题原因
- 语法错误:你编写的查询语句末尾多了一个多余的右括号
),属于基础语法问题。 - 结构匹配问题:
operations[?resourceType=='/certificates/ca']返回的是一个数组,数组内每个元素的items本身又是独立数组,直接在.items后加过滤条件无法匹配到嵌套层级内的id字段,需要先将items的嵌套数组展开为一维数组再做过滤。 - 额外不规范写法:你读取文件的lookup逻辑中,在jinja2表达式内部又嵌套了
{{ }}包裹变量,不符合语法规范,容易引发解析异常。
解决方案
调整查询语句,先展开items嵌套数组再做过滤,同时修正变量写法即可,修改后的任务示例如下:
- name: Get Source JSON Data set_fact: jsonExp: "{{ lookup('file', '/tmp/' ~ src_file_name) | from_json }}" - name: Get Cert Info set_fact: cert_data: "{{ jsonExp | json_query(jquery) }}" vars: # 末尾加 | [0] 可直接返回单个对象而非数组,按需选择 jquery: "operations[?resourceType=='/certificates/ca'].items[] | [?id=='trustedCerts_cert2']"
内容的提问来源于stack exchange,提问作者JScott
相关产品推荐
相关产品推荐

