【发布时间】:2020-11-25 19:18:57
【问题描述】:
从之前在 ansible 中的 GET api 调用,我得到了一个 json 结果。
api 调用如下所示:
- name: Refresh Datadog monitors list
uri:
url: http://my.api.com
return_content: yes
method: GET
status_code: 200
headers:
Content-Type: "application/json"
register: results
结果看起来像这样(虚拟数据):
[{
"name": "bob",
"id": 13590804,
"colour": "blue",
"created": "2019-11-21T07:41:33.148976+00:00",
"modified": "2019-11-21T07:41:33.148976+00:00",
"overall_state_modified": "2019-11-25T06:45:08+00:00",
"overall_state": "OK"
},
{
"name": "john",
"id": 123124515,
"colour": "green",
"created": "2019-11-21T07:41:33.148976+00:00",
"modified": "2019-11-21T07:41:33.148976+00:00",
"overall_state_modified": "2019-11-25T06:45:08+00:00",
"overall_state": "OK"
},
{
"name": "carl",
"id": 3252532,
"colour": "orange",
"created": "2019-11-21T07:41:33.148976+00:00",
"modified": "2019-11-21T07:41:33.148976+00:00",
"overall_state_modified": "2019-11-25T06:45:08+00:00",
"overall_state": "OK"
},
{
"name": "louis",
"id": 5675467,
"colour": "purple",
"created": "2019-11-21T07:41:33.148976+00:00",
"modified": "2019-11-21T07:41:33.148976+00:00",
"overall_state_modified": "2019-11-25T06:45:08+00:00",
"overall_state": "OK"
}]
在后续步骤中,我希望从 json 中仅提取两个值,使其看起来像:
[{
"name": "bob",
"id": 13590804
},
{
"name": "john",
"id": 123124515
},
{
"name": "carl",
"id": 3252532
},
{
"name": "louis",
"id": 5675467
}
]
我已尝试从不同来源进行多次迭代以尝试获得此结果,例如:
- name: "Display all id's with names"
debug: msg = "{{ results | json_query '[id, names]')}}"
和
- name: "Display all id's with names"
debug: msg = "{{ results | json_query '[*][id, names]')}}"
我可以理解我对 jmespath 的了解存在差距,但文档有点压倒性,我无法找到确切的解决方案。
【问题讨论】:
标签: ansible jmespath json-query