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

Ansible赋值新变量时是否会自动将JSON字符串转为字典?

问题解答

这是Ansible的正常设计特性,不属于Bug。

核心原因

  • Ansible基于Jinja2实现模板渲染逻辑,当你通过{{ }}包裹的表达式给set_fact赋值时,渲染引擎默认会对输出结果做自动类型探测与转换。
  • 如果渲染得到的字符串是合法的JSON/YAML格式,引擎会自动将其反序列化为对应的数据结构(字典、列表等)。你的案例中output.stdout是标准的JSON对象字符串,因此赋值后会被直接解析为字典类型,所以out is string的判断不成立,对应调试任务被跳过。

可选处理方案

如果你希望赋值后的out变量保持原始字符串类型,不触发自动类型转换,可以添加string过滤器强制指定类型:

- set_fact:
    out: "{{ output.stdout | string }}"

修改后out is string的判断会正常命中,后续需要使用JSON结构时,你也可以手动调用from_json过滤器完成转换:{{ out | from_json }}。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:45:03