我调用一个Web服务,该服务返回一个 json 响应。这是任务:
- name: calls webservice for json
uri:
url: ...
method: GET
body_format: json
register: json_response
这是被调用的Web服务返回的简化响应:
{
"nodes": {
"hash1": {
"name": "host1"
},
"hash2": {
"name": "host2"
}
}
}
如您所见,返回的响应中的 nodes 是一张地图。每个条目代表一个主机。键是一些哈希值,对我而言并不重要。我需要检查这些文件中的 name 是否包含指定值,例如。 “ host1”。
问题:如何检查返回的json是否在 name 字段中包含指定的主机?
先谢谢了,
祝你有美好的一天
休伯特
答案 0 :(得分:2)
您可以使用json_query过滤器来做到这一点,该过滤器在幕后使用JMESPath。
针对您问题的简单剧本如下:
---
- hosts: localhost
gather_facts: False
vars:
json_query: "nodes.*[] | [?name=='host1']"
json_response: |
{
"nodes": {
"hash1": {
"name": "host1"
},
"hash2": {
"name": "host2"
}
}
}
tasks:
- name: debug
debug:
msg: "{{ json_response | from_json | json_query(json_query) }}"