繁体   English   中英

用Python解析API输出

[英]Parse API output in Python

我是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
                }
            }

这应该有所帮助。 您可以遍历“项目”键并获取所需的信息

例如:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM