从restapiget创建嵌套json格式

2024-06-06 18:54:09 发布

您现在位置:Python中文网/ 问答频道 /正文

问题: 从restapiget存储的值创建json数据结构

问题: 动态创建嵌套数据结构

用于检索值的Python代码:

url = 'https://ciscoprime.com/webacs/api/v2/data/ClientDetails.json?.nocount=True&.maxResults=2&.firstResult=0&.full=true'
get_response = requests.get(url, verify=False)
response = json.dumps(get_response.json())
resp = json.loads(response)

#variable = resp['queryResponse']['entity'][i]['clientDetailsDTO']['']

i = 0
clients = {}
while i < len(resp['queryResponse']['entity']):
    clientID = resp.get("queryResponse", {}).get("entity", {})[i].get("clientDetailsDTO", {}).get("@id")
    associationTime = resp.get("queryResponse", {}).get("entity", {})[i].get("clientDetailsDTO", {}).get("associationTime")
    clientInterface = resp.get("queryResponse", {}).get("entity", {})[i].get("clientDetailsDTO", {}).get("clientInterface")
    connectionType = resp.get("queryResponse", {}).get("entity", {})[i].get("clientDetailsDTO", {}).get("connectionType")
    deviceIpAddress = resp.get("queryResponse", {}).get("entity", {})[i].get("clientDetailsDTO", {}).get("deviceIpAddress")
    deviceName = resp.get("queryResponse", {}).get("entity", {})[i].get("clientDetailsDTO", {}).get("deviceName")
    firstSeenTime = resp.get("queryResponse", {}).get("entity", {})[i].get("clientDetailsDTO", {}).get("firstSeenTime")
    ifIndex = resp.get("queryResponse", {}).get("entity", {})[i].get("clientDetailsDTO", {}).get("ifIndex")
    ipAddress = resp.get("queryResponse", {}).get("entity", {})[i].get("clientDetailsDTO", {}).get("ipAddress")
    macAddress = resp.get("queryResponse", {}).get("entity", {})[i].get("clientDetailsDTO", {}).get("macAddress")
    updateTime = resp.get("queryResponse", {}).get("entity", {})[i].get("clientDetailsDTO", {}).get("updateTime")
    vendor = resp.get("queryResponse", {}).get("entity", {})[i].get("clientDetailsDTO", {}).get("vendor")
    vlan = resp.get("queryResponse", {}).get("entity", {})[i].get("clientDetailsDTO", {}).get("vlan")
    vlanName = resp.get("queryResponse", {}).get("entity", {})[i].get("clientDetailsDTO", {}).get("vlanName")
    #print 'ClientID: {0}, associationTime: {1}, vlanName: {2}'.format(clientID, associationTime, vlanName)

    i += 1

GET格式为json

^{pr2}$

所需的数据结构输出。

clientID : value
{
    associationTime : value
    clientInterface : value
    etc...
}
clientID : value
{
    associationTime : value
    clientInterface : value
    etc...    
}
etc....

Tags: jsonurl数据结构getvalueresponseetcresp
2条回答

下面的代码可以满足您的需要。它找到id字段,然后遍历所有键并将它们添加到dict中,将id:{values}添加到主dict中,最后打印出来。在

导入json

my_response = {"queryResponse": {"@responseType": "listEntityInstances", "@count": 192077, "@last": 1,
                                 "@rootUrl": "https://ciscoprime.com/webacs/api/v2/data",
                                 "@requestUrl": "https://ciscoprime.com/webacs/api/v2/data/ClientDetails?.nocount=True&amp;.maxResults=2&amp;.firstResult=0&amp;.full=true",
                                 "entity": [{"clientDetailsDTO": {"apName": "nzcfd-rotooff-ap2", "deviceName": "cntl-1",
                                                                  "updateTime": 1490290426910,
                                                                  "protocol": "DOT11N2_4GNZ",
                                                                  "clientInterface": "management",
                                                                  "macAddress": "FF:FF:FF:FF:FF:FF",
                                                                  "ccxLSVersion": "V1", "policyTypeStatus": "NOMETHOD",
                                                                  "wgbMacAddress": "00:00:00:00:00:00",
                                                                  "wepState": "DISABLED", "ccxVersion": "UNSUPPORTED",
                                                                  "speed": "UNKNOWN", "@displayName": "4110106",
                                                                  "hreapLocallyAuthenticated": "2", "ssid": "Guest",
                                                                  "clientAaaOverrideAclApplied": "NA",
                                                                  "ccxVSVersion": "V1",
                                                                  "securityPolicyStatus": "FAILED",
                                                                  "authenticationAlgorithm": "OPENSYSTEM",
                                                                  "connectionType": "LIGHTWEIGHTWIRELESS",
                                                                  "postureStatus": "UNKNOWN", "deviceType": "none",
                                                                  "location": "Root Area", "wiredClientType": "NA",
                                                                  "status": "ASSOCIATED",
                                                                  "firstSeenTime": 1487771895967,
                                                                  "wgbStatus": "REGULARCLIENT",
                                                                  "vendor": "Samsung Electronics", "vlan": "10",
                                                                  "ccxMSVersion": "V1", "nacState": "ACCESS",
                                                                  "webSecurity": "DISABLED", "policyType": "NA",
                                                                  "associationTime": 1488178285705, "ifIndex": 0,
                                                                  "apIpAddress": {"address": "1.2.2.2"}, "@id": 4110106,
                                                                  "eapType": "UNNOWN",
                                                                  "mobilityStatus": "EXPORTANCHORED", "ipType": "IPV4",
                                                                  "ipAddress": {"address": "10.2.2.2"}, "apSlotId": 0,
                                                                  "encryptionCypher": "NONE",
                                                                  "apMacAddress": "FF:FF:FF:FF:FF:FF",
                                                                  "ccxFSVersion": "V1", "clientApMode": "UNKNOWN",
                                                                  "deviceIpAddress": {"address": "172.2.2.2"},
                                                                  "clientAclApplied": "NA"},
                                             "@url": "https://ciscoprime.com/webacs/api/v2/data/ClientDetails/4110106",
                                             "@type": "ClientDetails", "@dtoType": "clientDetailsDTO"},
                                            {"clientDetailsDTO": {"apName": "nzcfd-rotooff-ap2", "deviceName": "cntl-1",
                                                                  "updateTime": 1490290426910,
                                                                  "protocol": "DOT11N2_4GNZ",
                                                                  "clientInterface": "management",
                                                                  "macAddress": "FF:FF:FF:FF:FF:FF",
                                                                  "ccxLSVersion": "V1", "policyTypeStatus": "NOMETHOD",
                                                                  "wgbMacAddress": "00:00:00:00:00:00",
                                                                  "wepState": "DISABLED", "ccxVersion": "UNSUPPORTED",
                                                                  "speed": "UNKNOWN", "@displayName": "4110106",
                                                                  "hreapLocallyAuthenticated": "2", "ssid": "Guest",
                                                                  "clientAaaOverrideAclApplied": "NA",
                                                                  "ccxVSVersion": "V1",
                                                                  "securityPolicyStatus": "FAILED",
                                                                  "authenticationAlgorithm": "OPENSYSTEM",
                                                                  "connectionType": "LIGHTWEIGHTWIRELESS",
                                                                  "postureStatus": "UNKNOWN", "deviceType": "none",
                                                                  "location": "Root Area", "wiredClientType": "NA",
                                                                  "status": "ASSOCIATED",
                                                                  "firstSeenTime": 1487771895967,
                                                                  "wgbStatus": "REGULARCLIENT",
                                                                  "vendor": "Samsung Electronics", "vlan": "10",
                                                                  "ccxMSVersion": "V1", "nacState": "ACCESS",
                                                                  "webSecurity": "DISABLED", "policyType": "NA",
                                                                  "associationTime": 1488178285705, "ifIndex": 0,
                                                                  "apIpAddress": {"address": "1.2.2.2"}, "@id": 4110107,
                                                                  "eapType": "UNNOWN",
                                                                  "mobilityStatus": "EXPORTANCHORED", "ipType": "IPV4",
                                                                  "ipAddress": {"address": "10.2.2.2"}, "apSlotId": 0,
                                                                  "encryptionCypher": "NONE",
                                                                  "apMacAddress": "FF:FF:FF:FF:FF:FF",
                                                                  "ccxFSVersion": "V1", "clientApMode": "UNKNOWN",
                                                                  "deviceIpAddress": {"address": "172.2.2.2"},
                                                                  "clientAclApplied": "NA"},
                                             "@url": "https://ciscoprime.com/webacs/api/v2/data/ClientDetails/4110106",
                                             "@type": "ClientDetails", "@dtoType": "clientDetailsDTO"}]}}

clientlist = my_response['queryResponse'].get('entity', [])

# Initialize my empty dict
formatted_clients = {}

if clientlist:
    for client in clientlist:
        # Initialize an empty client dict.
        client_dict = {}
        # Validate clientDetailsDTO
        if "clientDetailsDTO" in client:
            client_id = client['clientDetailsDTO'].get('@id', '')
            if not client_id:
                # Let's bail out if this doesn't exist
                continue
            for key in client['clientDetailsDTO'].keys():
                # iterate through the keys, and add them to the client dict
                if key == "@id":
                    # we don't need the client id key inside the dict
                    continue
                client_dict[key] = client['clientDetailsDTO'][key]
            # append the client_dict to formatted list
            formatted_clients[client_id] = client_dict

print(json.dumps(formatted_clients, indent=4))

结果:

^{pr2}$

在您确切的上下文中,此代码将使用您想要的字段:

import json
import requests 

url = 'https://ciscoprime.com/webacs/api/v2/data/ClientDetails.json?.nocount=True&.maxResults=2&.firstResult=0&.full=true'
get_response = requests.get(url, verify=False)
response = json.dumps(get_response.json())
resp = json.loads(response)


clientlist = resp['queryResponse'].get('entity', [])

# Initialize my empty dict
formatted_clients = {}
search_keys = ["associationTime", "clientInterface", "connectionType", "deviceIpAddress", "deviceName", "firstSeenTime", "macAddress", "updateTime", "vendor", "vlan", "vlanName"]
if clientlist:
    for client in clientlist:
        # Initialize an empty client dict.
        client_dict = {}
        # Validate clientDetailsDTO
        if "clientDetailsDTO" in client:
            client_id = client['clientDetailsDTO'].get('@id', '')
            if not client_id:
                # Let's bail out if this doesn't exist
                continue
            for key in client['clientDetailsDTO'].keys():
                # iterate through the keys, and add them to the client dict
                if key in search_keys:
                    client_dict[key] = client['clientDetailsDTO'][key]
            # append the client_dict to formatted list
            formatted_clients[client_id] = client_dict

print(json.dumps(formatted_clients, indent=4))

您可以按如下方式更新客户端词典:

clients = []
for data in resp['queryResponse']['entity'] : 
    clientID = data.get("clientDetailsDTO", {}).get("@id")
    associationTime = data.get("clientDetailsDTO", {}).get("associationTime")
    clientInterface = data.get("clientDetailsDTO", {}).get("clientInterface")
    connectionType = data.get("clientDetailsDTO", {}).get("connectionType")
    deviceIpAddress = data.get("clientDetailsDTO", {}).get("deviceIpAddress")
    deviceName = data.get("clientDetailsDTO", {}).get("deviceName")
    firstSeenTime = data.get("clientDetailsDTO", {}).get("firstSeenTime")
    ifIndex = data.get("clientDetailsDTO", {}).get("ifIndex")
    ipAddress = data.get("clientDetailsDTO", {}).get("ipAddress")
    macAddress = data.get("clientDetailsDTO", {}).get("macAddress")
    updateTime = data.get("clientDetailsDTO", {}).get("updateTime")
    vendor = data.get("clientDetailsDTO", {}).get("vendor")
    vlan = data.get("clientDetailsDTO", {}).get("vlan")
    vlanName = data.get("clientDetailsDTO", {}).get("vlanName")

    clients.append({
        'ClientID' : clientID, 
        'value' :
        {
            'associationTime' : associationTime, 
            'vlanName' : vlanName,
            'connectionType' : connectionType
        }
    })

json.dumps(clients)

相关问题 更多 >