[英]How parse a list of dictionary and out the values in Ansible?
我有以下json输出。 这是字典的清单。 我只想解析它并输出其值。
我尝试了以下游戏,但没有成功...
"output1": {
"changed": false,
"msg": "All items completed",
"results": [
{
"item": [
{
"Device_Name": "SW1"
},
{
"Interface": "GigabitEthernet1/0/7"
}
]
}
]
}
- name: Display output1...2
debug:
msg: "{{ item.1.Device_Name }};{{ item.1.Interface }}"
with_subelements:
- "{{ output1.results }}"
- item
错误是““ msg”:“该任务包括带有未定义变量的选项。 错误是:“字典对象”没有属性“ int_name” \\ n \\ n”
请尝试以下-我还没有测试过。
- name: Display output1...2
debug:
msg: "{{ item|first }} : {{ item[item|first] }}"
with_items:
- "{{ output1.results[0].item }}"
又快又脏
以下任务可快速给出要求的内容
- set_fact:
Device_Name: "{{ output1.results[0]['item']|
map(attribute='Device_Name')|
select('defined')|
list|first }}"
Interface: "{{ output1.results[0]['item']|
map(attribute='Interface')|
select('defined')|
list|first }}"
细节
这是不良数据结构的典型示例。 下面的任务
- debug:
msg: "{{ output1.results|
map('dict2items')|list|flatten|
json_query('[?key==`item`].value')|flatten }}"
给出item ,它是一个列表,必须再次进行迭代,
"msg": [
{
"Device_Name": "SW1"
},
{
"Interface": "GigabitEthernet1/0/7"
}
]
而不是字典,这很容易引用。
"msg": [
{
"Device_Name": "SW1",
"Interface": "GigabitEthernet1/0/7"
}
]
由于进行了此类过滤,因此以下任务
- set_fact:
Device_Name: "{{ output1.results|
map('dict2items')|list|flatten|
json_query('[?key==`item`].value')|flatten|
map('dict2items')|list|
json_query('[*][?key==`Device_Name`].value')|flatten }}"
- set_fact:
Interface: "{{ output1.results|
map('dict2items')|list|flatten|
json_query('[?key==`item`].value')|flatten|
map('dict2items')|list|
json_query('[*][?key==`Interface`].value')|flatten }}"
- debug:
var: Device_Name
- debug:
var: Interface
给
"Device_Name": [
"SW1"
]
"Interface": [
"GigabitEthernet1/0/7"
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.