如何从 json 响应中获取数据的价值?
How to grab value in data from json resonse?
问:如何从 api 的响应中获取值?
我的代码:
#!/usr/bin/python3
API_KEY = ""
ORG_ID = ""
import meraki
import requests
import json
import time
import sys
from pprint import pprint
url = "https://api.meraki.com/api/v1/organizations/""/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)
pprint(response.json())
回复:
{'networkId': 'A_1234567890',
'serial': 'abcd-1234-abcd',
'model': 'MXYZ',
'lastReportedAt': '2021-01-01T00:00:00Z',
'uplinks': [{'interface': 'wan1',
'status': 'active',
'ip': 'x.x.x.x',
'gateway': 'x.x.x.x',
'publicIp': 'x.x.x.x',
'primaryDns': 'x.x.x.x',
'secondaryDns': 'x.x.x.x',
'ipAssignedBy': 'dhcp'},
{'interface': 'wan2',
'status': 'ready',
'ip': 'x.x.x.x',
'gateway': 'x.x.x.x',
'publicIp': 'x.x.x.x',
'primaryDns': 'x.x.x.x',
'secondaryDns': 'x.x.x.x',
'ipAssignedBy': 'dhcp'}]},
{'networkId': 'B_0987654321',
'serial': '1234-abcd-1234',
'model': 'MXYZ',
'lastReportedAt': '2021-01-01T00:00:00Z',
'uplinks': [{'interface': 'wan1',
'status': 'active',
'ip': 'x.x.x.x',
'gateway': 'x.x.x.x',
'publicIp': 'x.x.x.x',
'primaryDns': 'x.x.x.x',
'secondaryDns': 'x.x.x.x',
'ipAssignedBy': 'dhcp'},
{'interface': 'wan2',
'status': 'failed',
'ip': 'x.x.x.x',
'gateway': 'x.x.x.x',
'publicIp': 'x.x.x.x',
'primaryDns': 'x.x.x.x',
'secondaryDns': 'x.x.x.x',
'ipAssignedBy': 'dhcp'}]},
这是 50 多个网络的整个列表中的 2 个。
我想要它做的是:
找到状态“失败”,并打印连接错误,我在哪里可以找到它:
['networkId: XYZ'、'network name: ABC'、'interface: wan1'、'uplinks: failed'] 或类似的内容以使其可读。
此外,我已经获得了这段代码,用于从 networkId 创建网络名称并搜索上行链路,但我无法使其工作。
net_names = {
'A_1234567890':'Amsterdam',
'B_0987654321':'Rotterdam'
}
network_id = response_json.get('networkId')
for item in response_json['uplinks']:
if item['status'] == "active":
print('network ID:', network_id,'network_name:',net_names.get(network_id), 'Interface:',item['interface'])
我是 Python 的新手,我读了很多关于 JSON 的文章,但这些都是关于字典和列表的,对我来说没有多大意义,帮助我在我的具体问题中。
非常感谢任何帮助。
试试这个:
json_data = response.json()
net_names = {"A_1234567890": "Amsterdam", "B_0987654321": "Rotterdam"}
for network_data in json_data:
network_id = network_data.get("networkId")
for uplink_data in network_data.get("uplinks", []):
if uplink_data["status"] == "active":
print(
"network ID:",
network_id,
"network_name:",
net_names.get(network_id, "n/a"),
"Interface:",
uplink_data["interface"],
)
问:如何从 api 的响应中获取值?
我的代码:
#!/usr/bin/python3
API_KEY = ""
ORG_ID = ""
import meraki
import requests
import json
import time
import sys
from pprint import pprint
url = "https://api.meraki.com/api/v1/organizations/""/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)
pprint(response.json())
回复:
{'networkId': 'A_1234567890',
'serial': 'abcd-1234-abcd',
'model': 'MXYZ',
'lastReportedAt': '2021-01-01T00:00:00Z',
'uplinks': [{'interface': 'wan1',
'status': 'active',
'ip': 'x.x.x.x',
'gateway': 'x.x.x.x',
'publicIp': 'x.x.x.x',
'primaryDns': 'x.x.x.x',
'secondaryDns': 'x.x.x.x',
'ipAssignedBy': 'dhcp'},
{'interface': 'wan2',
'status': 'ready',
'ip': 'x.x.x.x',
'gateway': 'x.x.x.x',
'publicIp': 'x.x.x.x',
'primaryDns': 'x.x.x.x',
'secondaryDns': 'x.x.x.x',
'ipAssignedBy': 'dhcp'}]},
{'networkId': 'B_0987654321',
'serial': '1234-abcd-1234',
'model': 'MXYZ',
'lastReportedAt': '2021-01-01T00:00:00Z',
'uplinks': [{'interface': 'wan1',
'status': 'active',
'ip': 'x.x.x.x',
'gateway': 'x.x.x.x',
'publicIp': 'x.x.x.x',
'primaryDns': 'x.x.x.x',
'secondaryDns': 'x.x.x.x',
'ipAssignedBy': 'dhcp'},
{'interface': 'wan2',
'status': 'failed',
'ip': 'x.x.x.x',
'gateway': 'x.x.x.x',
'publicIp': 'x.x.x.x',
'primaryDns': 'x.x.x.x',
'secondaryDns': 'x.x.x.x',
'ipAssignedBy': 'dhcp'}]},
这是 50 多个网络的整个列表中的 2 个。
我想要它做的是:
找到状态“失败”,并打印连接错误,我在哪里可以找到它:
['networkId: XYZ'、'network name: ABC'、'interface: wan1'、'uplinks: failed'] 或类似的内容以使其可读。
此外,我已经获得了这段代码,用于从 networkId 创建网络名称并搜索上行链路,但我无法使其工作。
net_names = {
'A_1234567890':'Amsterdam',
'B_0987654321':'Rotterdam'
}
network_id = response_json.get('networkId')
for item in response_json['uplinks']:
if item['status'] == "active":
print('network ID:', network_id,'network_name:',net_names.get(network_id), 'Interface:',item['interface'])
我是 Python 的新手,我读了很多关于 JSON 的文章,但这些都是关于字典和列表的,对我来说没有多大意义,帮助我在我的具体问题中。
非常感谢任何帮助。
试试这个:
json_data = response.json()
net_names = {"A_1234567890": "Amsterdam", "B_0987654321": "Rotterdam"}
for network_data in json_data:
network_id = network_data.get("networkId")
for uplink_data in network_data.get("uplinks", []):
if uplink_data["status"] == "active":
print(
"network ID:",
network_id,
"network_name:",
net_names.get(network_id, "n/a"),
"Interface:",
uplink_data["interface"],
)