在 Python 中解析 API 输出

Parse API output in Python

我是 python 的新手,我一直在尝试解析 F5 API 请求的输出,但遇到了一些困难。我想提取所有 "name" 和 "destination" 值并将它们保存到一个文件中。这应该是一个名称和相应的 IP 地址。从下面的输出来看,它将是:

测试账户 10.1.1.1 test-account_44310.1.1.5

我可以提取单个元素,但我正在努力弄清楚如何遍历输出文件以便获得我想要的所有键值。我已缩短输出以使其更易于阅读。

parsed_json = json.loads(data)
destination = parsed_json['items'][0]['destination']
name = parsed_json['items'][0]['name']

这只会从整个输出文件中提取一个键值。非常感谢。

 {
        "kind": "tm:ltm:virtual:virtualcollectionstate",
        "items": [
            {
                "kind": "tm:ltm:virtual:virtualstate",
                "name": "test-account",
                "partition": "Common",
                "fullPath": "/Common/test-account",
                "generation": 1,
                "addressStatus": "yes",
                "autoLasthop": "default",
                "cmpEnabled": "yes",
                "connectionLimit": 0,
                "destination": "/Common/10.1.1.1:80",
                "enabled": true,
                "gtmScore": 0,
                "ipProtocol": "tcp",
                "mask": "255.255.255.255",
                "mirror": "disabled",
                "mobileAppTunnel": "disabled",
                "nat64": "disabled",
                "pool": "/Common/test-account",
                "rateLimit": "disabled",
                "rateLimitDstMask": 0,
                "rateLimitMode": "object",
                "rateLimitSrcMask": 0,
                "serviceDownImmediateAction": "none",
                "source": "0.0.0.0/0",
                "sourceAddressTranslation": {
                    "type": "automap"
                },
                "sourcePort": "preserve",
                "synCookieStatus": "not-activated",
                "translateAddress": "enabled",
                "translatePort": "enabled",
                "vlansDisabled": true,
                "vsIndex": 2,
                "rules": [
                    "/Common/redirect-http-to-https"
                ],
                "rulesReference": [
                    {
                        "link": 
                    }
                ],
                "policiesReference": {
                    "link": 
                    "isSubcollection": true
                },
                "profilesReference": {
                    "link": 
                    "isSubcollection": true
                }
            },
            {
                "kind": "tm:ltm:virtual:virtualstate",
                "name": "test-account_443",
                "partition": "Common",
                "fullPath": "/Common/test-account_443",
                "generation": 1,
                "selfLink": 
                "addressStatus": "yes",
                "autoLasthop": "default",
                "cmpEnabled": "yes",
                "connectionLimit": 0,
                "destination": "/Common/10.1.1.5:443",
                "enabled": true,
                "gtmScore": 0,
                "ipProtocol": "tcp",
                "mask": "255.255.255.255",
                "mirror": "disabled",
                "mobileAppTunnel": "disabled",
                "nat64": "disabled",
                "pool": "/Common/test-account",
                "poolReference": {
                    "link": 
                },
                "rateLimit": "disabled",
                "rateLimitDstMask": 0,
                "rateLimitMode": "object",
                "rateLimitSrcMask": 0,
                "serviceDownImmediateAction": "none",
                "source": "0.0.0.0/0",
                "sourceAddressTranslation": {
                    "type": "automap"
                },
                "sourcePort": "preserve",
                "synCookieStatus": "not-activated",
                "translateAddress": "enabled",
                "translatePort": "enabled",
                "vlansDisabled": true,
                "vsIndex": 3,
                "policiesReference": {
                    "link": 
                    "isSubcollection": true
                },
                "profilesReference": {
                    "link": 
                    "isSubcollection": true
                }
            }

这应该有所帮助。您可以遍历 "items" 键并获取所需信息

例如:

parsed_json = {
        "kind": "tm:ltm:virtual:virtualcollectionstate",
        "items": [
            {
                "kind": "tm:ltm:virtual:virtualstate",
                "name": "test-account",
                "partition": "Common",
                "fullPath": "/Common/test-account",
                "generation": 1,
                "addressStatus": "yes",
                "autoLasthop": "default",
                "cmpEnabled": "yes",
                "connectionLimit": 0,
                "destination": "/Common/10.1.1.1:80",
                "enabled": True,
                "gtmScore": 0,
                "ipProtocol": "tcp",
                "mask": "255.255.255.255",
                "mirror": "disabled",
                "mobileAppTunnel": "disabled",
                "nat64": "disabled",
                "pool": "/Common/test-account",
                "rateLimit": "disabled",
                "rateLimitDstMask": 0,
                "rateLimitMode": "object",
                "rateLimitSrcMask": 0,
                "serviceDownImmediateAction": "none",
                "source": "0.0.0.0/0",
                "sourceAddressTranslation": {
                    "type": "automap"
                },
                "sourcePort": "preserve",
                "synCookieStatus": "not-activated",
                "translateAddress": "enabled",
                "translatePort": "enabled",
                "vlansDisabled": True,
                "vsIndex": 2,
                "rules": [
                    "/Common/redirect-http-to-https"
                ],
                "rulesReference": [
                    {
                        "link": True
                    }
                ],
                "policiesReference": {
                    "link": True,
                    "isSubcollection": True
                },
                "profilesReference": {
                    "link": True,
                    "isSubcollection": True
                }
            },
            {
                "kind": "tm:ltm:virtual:virtualstate",
                "name": "test-account_443",
                "partition": "Common",
                "fullPath": "/Common/test-account_443",
                "generation": 1,
                "selfLink": True,
                "addressStatus": "yes",
                "autoLasthop": "default",
                "cmpEnabled": "yes",
                "connectionLimit": 0,
                "destination": "/Common/10.1.1.5:443",
                "enabled": True,
                "gtmScore": 0,
                "ipProtocol": "tcp",
                "mask": "255.255.255.255",
                "mirror": "disabled",
                "mobileAppTunnel": "disabled",
                "nat64": "disabled",
                "pool": "/Common/test-account",
                "poolReference": {
                    "link": True
                },
                "rateLimit": "disabled",
                "rateLimitDstMask": 0,
                "rateLimitMode": "object",
                "rateLimitSrcMask": 0,
                "serviceDownImmediateAction": "none",
                "source": "0.0.0.0/0",
                "sourceAddressTranslation": {
                    "type": "automap"
                },
                "sourcePort": "preserve",
                "synCookieStatus": "not-activated",
                "translateAddress": "enabled",
                "translatePort": "enabled",
                "vlansDisabled": True,
                "vsIndex": 3,
                "policiesReference": {
                    "link": True,
                    "isSubcollection": True
                },
                "profilesReference": {
                    "link": True,
                    "isSubcollection": True
                }
            }]
        }


res = []
for value in parsed_json["items"]:
    print(value["name"])
    print(value["destination"])
    print(value["destination"].split("/")[-1].split(":")[0])  #if you need only the IP.

输出:

test-account
/Common/10.1.1.1:80
10.1.1.1
test-account_443
/Common/10.1.1.5:443
10.1.1.5