在Python

时间:2018-03-15 12:02:06

标签: python f5

我是python的新手,我一直在尝试解析F5 API请求的输出,而且我有点挣扎。我想提取所有“名称”和“目标”值并将其保存到文件中。这应该是名称和相应的IP地址。从下面的输出中可以看出:

测试帐户10.1.1.1 test-account_443 10.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
                }
            }

1 个答案:

答案 0 :(得分:0)

这应该有所帮助。你可以迭代"项目"密钥并获取所需信息

<强>实施例

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