Получение определенного значения данных JSON

Я получаю данные 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) 

Есть ли способ получить это значение?

r.json()['Cisco-IOS-XE-segment-routing:ipv4']['prefixes'][0]‌​['index']['range-sta‌​rt']
Abdul Niyas P M 20.05.2019 16:38
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
68
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вам нужно начать с начала 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)

Другие вопросы по теме