0

我从下面的变量中得到了 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"
        }
    }
]
}

}

数字是由软件自动添加的,我无法删除它们。

也可以添加额外的 IP 地址 childName.ipAddresses??

谢谢你的帮助

4

1 回答 1

0

问:“按 id 选择(提取)整个对象。”

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"
        }
    }
于 2020-02-06T20:40:04.560 回答