Python如何从Meraki API的JSON响应中提取失败上行链路相关字段
从Meraki API响应中提取故障上行链路的实现方案
现有代码的问题梳理
- 你没有把API响应的JSON结果赋值给
response_json变量,直接使用会报变量未定义的错误 - API返回的响应是列表类型,外层是50多个网络信息组成的数组,你之前直接对
response_json调用.get('networkId')是操作列表,自然会报错 - 筛选条件写的是
status == "active",和你要找的failed状态逻辑相反 - 原请求URL缺了
ORG_ID参数占位,两个斜杠连在一起会导致请求404 - 没有对不存在于
net_names映射的networkId做兜底处理,可能出现None的情况
完整可运行代码
#!/usr/bin/python3 API_KEY = "" ORG_ID = "" import requests from pprint import pprint # 补全URL的ORG_ID占位 url = f"https://api.meraki.com/api/v1/organizations/{ORG_ID}/appliance/uplink/statuses" payload = {} headers = { 'Content-Type': 'application/json', 'Accept': 'application/json', 'X-Cisco-Meraki-API-Key': API_KEY } response = requests.request('GET', url, headers=headers, data = payload) # 把响应转成JSON列表赋值 response_json = response.json() # networkId映射表 net_names = { 'A_1234567890':'Amsterdam', 'B_0987654321':'Rotterdam' } # 外层遍历所有网络条目 for network in response_json: network_id = network.get('networkId') # 取不到网络名默认显示未知 network_name = net_names.get(network_id, '未知网络') # 内层遍历当前网络的所有上行链路 for uplink in network.get('uplinks', []): # 只筛选故障链路 if uplink.get('status') == 'failed': # 按你要求的格式输出 print([ f'networkId: {network_id}', f'network name: {network_name}', f'interface: {uplink.get("interface")}', f'uplinks: {uplink.get("status")}' ])
逻辑说明
- 所有取值都用
.get()方法,避免某个键不存在时报错中断程序 - 两层循环分别对应外层的网络列表、内层的单网络上行链路列表,完全匹配API返回的嵌套结构
- 输出格式完全符合你要求的列表样式
内容的提问来源于stack exchange,提问作者Juriaan
相关产品推荐
相关产品推荐

