如何在 json 查询中将双引号键作为变量

how to put double quotes key as varaible in json query

我需要在 JSON 查询中将双引号键作为变量。如果我直接用反斜杠放置键字符串,它工作正常,但是当我将它用作变量时却不行

---
- hosts: localhost
  gather_facts: no
  vars:
    cert: |
      {
        "apiVersion": "v1",
        "data": {
            "ca.crt": "xxxx",
            "tls.crt": "yyyyy",
            "tls.key": "zzzzz"
        }
 
      }
    cert_type: "ca.crt"
  tasks:
    - debug:
        #msg: "{{cert|from_json|json_query('data.`{{cert_type}}`')}}"  ## Does not work 
        msg: "{{cert|from_json|json_query('data.\"ca.crt\"')}}"   ## works

您永远不会嵌套 Jinja {{...}} 模板标记。当你这样写时:

msg: "{{cert|from_json|json_query('data.`{{cert_type}}`')}}"  ## Does not work 

您正在查找文字字符串 {{cert_type}}。您想要执行变量插值,它可能看起来像这样(使用 Jinja 的字符串连接运算符):

    - debug:
        msg: >-
          {{cert|from_json|json_query('data."' ~ cert_type ~ '"') }}

或者这个(使用Python-styleformat方法):

    - debug:
        msg: >-
          {{cert|from_json|json_query('data."{}"'.format(cert_type)) }}

根据您的示例剧本,上述两项任务都会导致:

TASK [debug] ********************************************************************************************
ok: [localhost] => {
    "msg": "xxxx"
}