![](/img/trans.png)
[英]How to add multiple objects into a single array in a json file using Python?
[英]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.