Динамическое чтение данных JSON с использованием Python

1

У меня есть 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']. Точно так же у меня будет много другого статуса, чтобы проверить, чем они отличаются друг от друга.

Что можно сделать здесь, чтобы прочитать вывод, даже если ключи меняются.

Просьба уточнить.

  • 0
    Я предлагаю вам, прежде чем получить доступ, чтобы проверить, существует if "value" in json_data: output=json_data['value'] вам узел: if "value" in json_data: output=json_data['value'] и сделать это для всех вложенных узлов
Теги:

1 ответ

0

Когда вы вызываете .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'))
  • 1
    Я отредактировал ваш код, потому что, если 'status' нет, то json_data.get('status').get('code') завершится ошибкой, но, подумав, вопрос предполагает, что он присутствует всегда, поэтому json_data['status'] должно быть в порядке.
  • 0
    Спасибо Алекс, это правильно
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню