Я получаю данные JSON из запроса RESTCONF HTTPS, используя следующий код.
https_request = 'https://' + host + '/restconf/data/Cisco-IOS-XE-native:native/interface/'
headers = {'Content-type': 'application/yang-data+json', 'Accept': 'application/yang-data+json'}
r = requests.get(https_request, auth=(user, password), headers=headers, verify=False)
print r.json()
Файл JSON, который я получил:
{
"Cisco-IOS-XE-native:interface": {
"GigabitEthernet": [
{
"name": "1",
"description": "DON'T TOUCH ME",
"isis": {
"Cisco-IOS-XE-isis:metric": {
"value": 2
}
....
},
{
"name": "2",
"isis": {
"Cisco-IOS-XE-isis:metric": {
"value": 4
} ....
},
{
"name": "3",
"shutdown": [
null
],
"isis": {
"Cisco-IOS-XE-isis:metric": {
"value": 7
}....
}
],
"Loopback": [
{
"name": 0,
"isis": {
"Cisco-IOS-XE-isis:metric": {
"value": 1
}
],
"Tunnel": [
{
"name": 0,
"isis": {
"Cisco-IOS-XE-isis:metric": {
"value": 3
}....
}
]
}
По сути, я хочу, чтобы моя функция возвращала "value"
поля isis
поля каждого интерфейса. Я попробовал следующий код для GigabitEthernet
:
value = r.json()['Cisco-IOS-XE-native:interface']['GigabitEthernet'][0]['isis']['metric']['value']
У меня такая ошибка:
print Router_1.get_isis_metric()['Cisco-IOS-XE-native:interface']['GigabitEthernet'][0]['isis']['metric']['isis']
KeyError: 'metric'
2 ответа
Я думаю, вы ошиблись metric
в Cisco-IOS-XE-isis:metric
Пытаться :
value = r.json()['Cisco-IOS-XE-native:interface']['GigabitEthernet'][0]['isis']['Cisco-IOS-XE-isis:metric']['value']
Изменить 1
for index in range(len(r.json()['Cisco-IOS-XE-native:interface']['GigabitEthernet'])):
value = r.json()['Cisco-IOS-XE-native:interface']['GigabitEthernet'][index]['isis']['Cisco-IOS-XE-isis:metric']['value']
print(value)
Используя понимание списка, где вы перебираете список словарей и собираете значение для каждого интерфейса, например для GigabitEthernet
dct = {
"Cisco-IOS-XE-native:interface": {
"GigabitEthernet": [
{
"name": "1",
"description": "DON'T TOUCH ME",
"isis": {
"Cisco-IOS-XE-isis:metric": {
"value": 2
}}
},
{
"name": "2",
"isis": {
"Cisco-IOS-XE-isis:metric": {
"value": 4
}}
},
{
"name": "3",
"shutdown": [
None
],
"isis": {
"Cisco-IOS-XE-isis:metric": {
"value": 7
}}
}
]}}
result = [item['isis']["Cisco-IOS-XE-isis:metric"]['value'] for item in dct['Cisco-IOS-XE-native:interface']['GigabitEthernet']]
На выходе будет
[2, 4, 7]
Или, чтобы собрать значения для всех интерфейсов, вы можете перебрать интерфейсы и собрать значения для каждого интерфейса
interfaces = ['GigabitEthernet', 'Loopback', 'Tunnel']
result = [item['isis']["Cisco-IOS-XE-isis:metric"]['value'] for interface in interfaces for item in dct['Cisco-IOS-XE-native:interface'][interface]]
print(result)
На выходе будет
[2, 4, 7, 1, 3]
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.