[英]Loop through JSON response - Ansible
我從服務器收到一個JSON響應,如下所示:
{
"rules": [
{
"id": "1234",
"disabled": false,
"condition": [
"or",
[
"contains",
[
"path",
"payload",
"custom_details",
"resolved"
],
"Platform"
],
[
"contains",
[
"path",
"payload",
"custom_details",
"firing"
],
"Platform"
]
],
"catch_all": false,
"advanced_condition": [],
"actions": [
[
"route",
"XYZ123"
],
[
"extract",
"^\\[.*\\] *([^ ]*)",
[
"path",
"payload",
"summary"
],
"description"
]
]
},
{
"id": "9876",
"disabled": false,
"condition": [
"or",
[
"contains",
[
"path",
"payload",
"custom_details",
"resolved"
],
"Sidewalk"
],
[
"contains",
[
"path",
"payload",
"custom_details",
"firing"
],
"Sidewalk"
]
],
"catch_all": false,
"advanced_condition": [],
"actions": [
[
"route",
"QWERT1"
],
[
"extract",
"^\\[.*\\] *([^ ]*)",
[
"path",
"payload",
"summary"
],
"description"
]
]
}
]
我想循環遍歷並匹配字符串Sidewalk
。 如果存在匹配項,則獲取匹配項的id
的值。
我試過了
---
- name: API call - GET Event Rule ID
uri:
url: "{{ api_event_rules }}"
method: GET
status_code: 200
headers:
Content-Type: "application/json"
Accept: "application/vnd.ap+json;version=2"
Authorization: "Token token={{ api_token }}"
register: json_response
我嘗試了這個JMESPath
rules[*].condition[*][2]
但這給出了這樣的內容:
[
[
"Platform",
"Platform"
],
[
"Sidewalk",
"Sidewalk"
],
我無法通過這條路,這對ansible很新。 任何幫助深表感謝。
問:“匹配字符串Sidewalk。如果存在匹配項,則獲取匹配的id的值。”
答:不清楚我們要尋找哪個“人行道”。 讓我們來第一個。 下面的任務創建一個id和相應條件的字典
- set_fact:
ids: "{{ rules|
json_query('[*].{key: condition[1][2], value: id}')|
items2dict
}}"
- debug:
var: ids['Sidewalk']
調試給出
"ids['Sidewalk']": "9876"
如果這是一個有條件的任務,請在下面進行調試
- debug:
msg: "Sidewalk found with id: {{ ids['Sidewalk'] }}"
when: "'Sidewalk' in ids.keys()"
給
"msg": "Sidewalk found with id: 9876"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.