I have got json from variable like below.
[
{
"policyName1": {
"resourceType": "Name1Type",
"id": "uuid-0000-000-0-1",
"extraAttr1":
[
{
"network11":
{
"allowAction": "yes",
"ipAddresses":
[
"192.168.29.193",
"192.168.29.196"
],
"disabled": false,
"ip_protocol": "IPV4_IPV6"
}
}
]
}
},
{
"policyName2": {
"resourceType": "name2Type",
"id": "uuid-0000-000-0-2",
"extraAttr12":
[
{
"network12":
{
"allowAction": "yes",
"ipAddresses":
[
"192.168.29.193",
"192.168.29.197"
],
"disabled": false,
"ip_protocol": "IPV4_IPV6"
}
}
]
}
},
{
"policyName3": {
"resourceType": "name3Type",
"id": "uuid-0000-000-0-3",
"extraAttr2":
[
{
"network13":
{
"allowAction": "yes",
"ipAddresses":
[
"192.168.29.191",
"192.168.29.195"
],
"disabled": false,
"ip_protocol": "IPV4_IPV6"
}
}
]
}
}
]
As you can see it is a normaln json. I need select (extract) whole object by id. For example, when I put id "uuid-0000-000-0-3" i would like receive object PolicyName3
{
"policyName3": {
"resourceType": "name3Type",
"id": "uuid-0000-000-0-3",
"extraAttr3":
[
{
"netowork13":
{
"allowAction": "yes",
"ipAddresses":
[
"192.168.29.191",
"192.168.29.195"
],
"disabled": false,
"ip_protocol": "IPV4_IPV6"
}
}
]
}
}
The digit are add automaticly by software and I can not remove them.
Also it is possible to add extra IP address childName.ipAddresses??
Thank you for help
Q: "Select (extract) the whole object by id."
A: Given the variable policy_list
the tasks below
- set_fact:
ext1: "{{ policy_list|
map('dict2items')|list|flatten|
json_query(query)|
items2dict }}"
vars:
id: "uuid-0000-000-0-3"
query: "[?value.id == '{{ id }}']"
- debug:
var: ext1
give
"ext1": {
"policyName3": {
"extraAttr2": [
{
"network13": {
"allowAction": "yes",
"disabled": false,
"ipAddresses": [
"192.168.29.191",
"192.168.29.195"
],
"ip_protocol": "IPV4_IPV6"
}
}
],
"id": "uuid-0000-000-0-3",
"resourceType": "name3Type"
}
}