Ansible遍历未知键名嵌套对象提取1h字段值的实现问题
解决方法
你需要调整JMESPath查询语句,先定位到buckets对象,再用*通配符匹配所有动态键对应的子对象,最后提取1h属性值。
原写法错误原因
你原来的查询直接在results数组元素下查找1h属性,跳过了buckets层,也没有对buckets下的动态键做通配匹配,所以无法定位到目标值。
正确的Playbook写法
- name: 提取所有1h对应值 set_fact: test: "{{ etat_ms_rep.results | json_query(jmesquery) }}" vars: jmesquery: '[*].buckets.*."1h"'
结果说明
执行后得到的test默认是二维数组结构:[[-1, 100], [100, 100]]
如果你需要得到扁平化的一维数组,可以加上flatten过滤器:
- name: 提取所有1h对应值并扁平化 set_fact: test: "{{ etat_ms_rep.results | json_query(jmesquery) | flatten }}" vars: jmesquery: '[*].buckets.*."1h"'
执行后test值为:[-1, 100, 100, 100]
内容的提问来源于stack exchange,提问作者Flo
相关产品推荐
相关产品推荐

