如何在 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"
}
我需要在 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"
}