Как извлечь объект из массива с помощью json_query? - PullRequest
0 голосов
/ 06 февраля 2020

Я получил json от переменной, как показано ниже.

[
{
    "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"
            }
        }
    ]
    }
}

]

Как вы можете видеть, это нормальный json. Мне нужно выбрать (извлечь) весь объект по id. Например, когда я ставлю id "uuid-0000-000-0-3", я хотел бы получить объект 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"
        }
    }
]
}

}

Di git автоматически добавляется программным обеспечением и я не могу их удалить.

Также есть возможность добавить дополнительный IP-адрес childName.ipAddresses ??

Спасибо за помощь

1 Ответ

0 голосов
/ 06 февраля 2020

Q: "Выбрать (извлечь) весь объект по идентификатору."

A: С учетом переменной policy_list задачи ниже

    - 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

Да

    "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"
        }
    }
...