У меня есть URL-адрес, который выводит данные JSON при вызове. Я должен проверить конкретное слово в этом выпуске JSON. Пример ниже -
r1 = session.get(authurl, headers=headers, timeout=6)
resphead = r1.headers.get('content-type')
if 'application/json' in resphead:
json_data = r1.json()
overallstatus1 = str((json_data['status']))
overallstatus2 = str((json_data['status']['code']))
Иногда вывод должен вызываться с использованием ['status']['code']
и иногда секция кода не будет отображаться на выходе, то есть просто ['status']
. Точно так же у меня будет много другого статуса, чтобы проверить, чем они отличаются друг от друга.
Что можно сделать здесь, чтобы прочитать вывод, даже если ключи меняются.
Просьба уточнить.
Когда вы вызываете .json()
в свой объект ответа, он возвращает python dict
. Поэтому вы можете воспользоваться встроенной функцией get()
словарей, которая возвращает ключ, если он существует в словаре, в противном случае некоторое заданное значение (defalt is None
)
Из документов: https://docs.python.org/2/library/stdtypes.html#dict.get
Тогда вызовы вашего кода будут
overallstatus1 = str(json_data.get('status'))
overallstatus2 = str(json_data.get('status', {}).get('code'))
'status'
нет, то json_data.get('status').get('code')
завершится ошибкой, но, подумав, вопрос предполагает, что он присутствует всегда, поэтому json_data['status']
должно быть в порядке.
if "value" in json_data: output=json_data['value']
вам узел:if "value" in json_data: output=json_data['value']
и сделать это для всех вложенных узлов