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

Ansible运行含单引号的JSON输入Playbook报错,如何解析?

解决Ansible Playbook中含单引号JSON的解析问题

方法1:用YAML块标量包裹JSON

YAML的块标量(|或>)能完整保留字符串的原始格式,避开YAML的引号解析逻辑,完美适配带单引号的JSON:

- name: 执行带单引号的JSON查询
  debug:
    msg: "{{ lookup('json_query', query) }}"
  vars:

    query: |
      {
        "filter": "name == 'John Doe'"
      }

|会保留所有换行和原始字符,JSON里的单引号不会被YAML当成语法符号处理。

方法2:转义YAML中的单引号

如果偏好行内写法,YAML里用两个连续单引号''表示一个实际的单引号,同时注意转义JSON的双引号(因为外层用双引号包裹字符串):

- name: 转义单引号后执行查询
  debug:
    msg: "{{ lookup('json_query', '{\"filter\": \"name == ''John Doe''\"}') }}"

方法3:将JSON单独存为变量文件

把带单引号的JSON放到独立的变量文件中,避免主Playbook的语法冲突:
比如创建vars/query_vars.yml:

user_filter: |
  {
    "filter": "name == 'John Doe'"
  }

然后在Playbook中引入:

- name: 加载外部变量执行查询
  debug:
    msg: "{{ lookup('json_query', user_filter) }}"
  vars_files:
    - vars/query_vars.yml

方法4:用Jinja2 Raw字符串屏蔽解析

用{% raw %}和{% endraw %}包裹JSON,让Ansible不解析里面的特殊字符:

- name: 用Raw字符串处理JSON
  debug:
    msg: "{{ lookup('json_query', {% raw %}{\"filter\": \"name == 'John Doe'\"}{% endraw %}) }}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:36:20