You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:57:07