Я получаю данные JSON из HTTPS-запроса RESTCONF, используя следующий код
https_request = 'https://' + host + '/restconf/data/' + operation
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()
Данные, которые я получил, следующие:
{
"Cisco-IOS-XE-segment-routing:ipv4": {
"prefixes": [
{
"ipprefix": "1.1.1.1/32",
"index": {
"range-start": 333,
"range": 1
}
}
]
}
}
По сути, я хочу вернуть значение поля "range-start"
, которое равно 333
. Я пробовал следующее, но это не сработало.
for element in r:
id = element['range-start']
print(id)
Есть ли способ получить это значение?
Вам нужно начать с начала JSON и двигаться к нужному ключу. Для этого вам нужно начать с Cisco-IOS-XE-segment-routing:ipv4
.
prefixes = r.json()["Cisco-IOS-XE-segment-routing:ipv4"]["prefixes"]
id = prefixes[0]["index"]["range-start"]
Если есть несколько префиксов, вы можете перебрать их и получить доступ к каждому range-start
.
Из консоли Python:
>>> import json
... data = json.loads('{"Cisco-IOS-XE-segment-routing:ipv4": {"prefixes": [{"ipprefix": "1.1.1.1/32", "index": {"range-start": 333, "range": 1}}]}}')
... print(data['Cisco-IOS-XE-segment-routing:ipv4']['prefixes'][0]['index']['range-start'])
333
>>>
Поскольку вы перебираете элементы, я бы предложил этот подход с использованием вспомогательной функции:
def get_id(element):
prefixes = r.json()["Cisco-IOS-XE-segment-routing:ipv4"]["prefixes"]
id = prefixes[0]["index"]["range-start"]
return id
Затем вы можете сделать, как в вашем вопросе:
for element in r:
id = get_id(element)
print(id)
r.json()['Cisco-IOS-XE-segment-routing:ipv4']['prefixes'][0]['index']['range-start']