如何在Ansible中通过变量提取含短横线的JSON键值?
解决Ansible用变量提取含短横线的JSON键值问题
针对你遇到的问题,有两种简单可靠的解决办法:
方法一:直接用Ansible字典的方括号访问(推荐)
Ansible的字典对象本身支持通过方括号+变量的方式访问键,不管键有没有特殊字符,完全不需要用json_query,写法更简洁:
- set_fact: lookup_key: profile-id - set_fact: value: "{{ data[lookup_key] }}"
执行后value的值就是1234,直接满足需求。
方法二:构造正确的json_query查询字符串
如果你一定要用json_query,需要把变量lookup_key包装成带双引号的查询表达式,用Jinja2的字符串拼接符~来实现:
- set_fact: lookup_key: profile-id - set_fact: value: "{{ data | json_query('\"' ~ lookup_key ~ '\"') }}"
这里通过'\"'拼接出双引号,让json_query收到的查询语句是"profile-id",和你手动写的格式一致,就能正确提取值。
你之前尝试失败的原因说明
json_query("lookup_key"):这里的lookup_key是字符串字面量,不是变量,所以会去查键名为lookup_key的值,自然找不到。json_query(\"lookup_key\"):转义方式错误,最终传递给json_query的是包含双引号的键名"profile-id"(带引号本身),而你的JSON键是不带外层双引号的profile-id,所以匹配失败。- 正则替换的方法完全没必要,反而因为多余的转义导致
json_query语法解析错误。
内容的提问来源于stack exchange,提问作者Adama
相关产品推荐
相关产品推荐

