簡體   English   中英

Python - 檢查 json 數組是否有多個對象

[英]Python - Check if json array has multiple objects

我正在嘗試解析來自路由器的 output 的數據,但有時會有兩個重復的值。 因此,我需要檢查 3 種可能性,一個 MAC、兩個 MAC 和沒有 MAC。

這是我目前擁有的:

            else: #Starts the parse
                parser5 = ttp(output5, template_05_ad)
                parser5.parse()
                #put result in JSON format
                results_0 = parser5.result(format='json')[0]
                #str to list **convert with json.loads
                result_0 = json.loads(results_0)

                #Places the results into variables
                if 'mac' in result_0[0][0]:
                    mac_connected = str(result_0[0][0]['mac'])
                elif 'mac' in result_0[0]:
                    mac_connected = str(result_0[0]['mac'])
                else:
                    mac_connected = 'NULL'

輸出如下所示:

One MAC:
                                                             CE 
Vlan     Mac Address       Type        Interface      CTag  Vlan
----  -----------------  ---------  ----------------  ----  ----
4065  E1:B4:19:64:1B:51  Dynamic    10/0/1@1/2/2      na    na  
Total MAC addresses for this criterion: 1

Two MAC:
                                                             CE 
Vlan     Mac Address       Type        Interface      CTag  Vlan
----  -----------------  ---------  ----------------  ----  ----
4065  E1:B4:19:64:1B:51  Dynamic    10/0/1@1/2/2      na    an  
4065  E1:B4:19:64:1B:51  Dynamic    10/0/1@1/2/2      na    na  
Total MAC addresses for this criterion: 1

No MAC:
No MAC addresses found for this criterion

當它被解析時,它看起來像這樣(從result_0 ):

One MAC::
[{'mac': 'E1:B4:19:64:1B:51'}]

Two MAC:
[[{'mac': 'E1:B4:19:64:1B:51'}, {'mac': 'E1:B4:19:64:1B:51'}]]

No MAC:
[{}]

對不起,如果之前已經回答過,任何幫助將不勝感激,謝謝。

我不確定您希望如何返回數據,但這可能會幫助您更接近解決方案?

def CheckMAC(mac):
    connected_mac = ""
    for value in mac:
        if value:
            if isinstance(value, dict):
                return(value['mac'])
            elif isinstance(value, list):
                for nested_value in value:
                    connected_mac += f"{nested_value['mac']} "
                return(connected_mac.strip())
        else:
            return("NULL")

oneMAC = [{'mac': 'E1:B4:19:64:1B:51'}]
twoMAC = [[{'mac': 'E1:B4:19:64:1B:51'}, {'mac': 'E1:B4:19:64:1B:51'}]]
noMAC = [{}]

print(CheckMAC(oneMAC))
print(CheckMAC(twoMAC))
print(CheckMAC(noMAC))

結果:

E1:B4:19:64:1B:51
E1:B4:19:64:1B:51 E1:B4:19:64:1B:51
NULL

如果我理解正確,您將獲得字典列表或單個 json 字典作為result_0[0]的值。

您可以先檢查它是否是列表。 由於您始終只對第一個 mac 值感興趣,因此在這種情況下您可以只使用第一個列表元素。 如果您隨后使用具有默認值的.get()方法,則無需將空大小寫視為單獨的:

            else: #Starts the parse
                parser5 = ttp(output5, template_05_ad)
                parser5.parse()
                #put result in JSON format
                results_0 = parser5.result(format='json')[0]
                #str to list **convert with json.loads
                result_0 = json.loads(results_0)

                if isinstance(result_0[0], list):
                    result_0[0] = result_0[0][0]

                #Places the results into variables
                mac_connected = result_0[0].get('mac', 'NULL')

(這假設在列表的情況下,你想要的 mac 結果總是在result[0][0]中)

另一種選擇可能是以某種方式調整您的 TTP 模板,使其始終首先返回一個列表(即使其中只有一個元素)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM