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

如何在Ansible中替换json_query返回结果中的null为novalue

你之前写法报错的核心原因是:json_query 使用的是 JMESPath 查询语法,不是 Jinja2 模板语法,不能直接在查询语句内嵌套 Ansible 的 default() 过滤器,语法规则不兼容。

下面是两种可直接运行的正确实现方案:

方案1:JMESPath 内置函数处理(推荐)

直接使用 JMESPath 自带的 if_null 函数,在查询阶段就完成空值替换,一步到位:

- debug: msg="{{ out1 | json_query(myquery) }}"
  vars:
    myquery: "[].{dest: destination, int: if_null(interface, 'novalue')}"
  register: out2

方案2:查询后用 Ansible 过滤器处理

如果你更习惯用 Ansible 原生的 default 过滤器,可以先完成查询,再对结果批量替换:

- debug: 
    msg: "{{ out1 | json_query(myquery) | map('combine', {'int': item.int | default('novalue', true)}) | list }}"
  vars:
    myquery: "[].{dest: destination ,int: interface}"        
  register: out2

注意这里给 default 加了第二个参数 true,作用是强制覆盖 null、空字符串等所有假值,避免部分场景下替换不生效的问题。

两种方案运行后,输出结果里 interface 字段的 null 都会被替换为字符串 novalue。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:15:08