Как использовать значение в файле JSON в инструкции if

#python #json

#python #json

Вопрос:

Я пытаюсь создать оператор if на основе значения из используемого мной API. Этот API содержит значение кода состояния, "status" . если это 404 (или другие) Я хочу вернуть ошибку, иначе продолжайте.

Пример JSON:

 {
  "data": {
    "test_index": {
      "test_a": [...], // 429 items
      "test_b": [...]  // 182 items
      }
  },
  "status": 200
}
  

При выполнении кода ниже:

 import json
import urllib.request as ur

API = ur.urlopen('https://example.com')
data = json.loads(API.read())

if data['status'][0] == 404:
    print("404")
else:
    print("Not 404")
  

Я получаю следующую ошибку:

 TypeError: 'int' object is not subscriptable
  

Которое ссылается на строку 7, оператор if.

Как мне преобразовать это значение JSON во что-то, с чем я могу работать?

Комментарии:

1. data['status'] является целым числом, 200 в вашем примере, так что ожидалось от data['status'][0] ?

2. если вы проверите, type(data['status']) какой оператор be integer [] (нижний индекс) не определен для integer, он определен для list, string, dict в основных типах.

3. data это обычная структура данных Python, а не JSON. (Вы расшифровали ответ JSON с помощью json.loads для того, чтобы определить data ; вы можете просто взглянуть на все dict , чтобы увидеть, как это выглядит.)

Ответ №1:

data['status'] является целым числом, и вы не можете проиндексировать целое число индексом, как вы делаете для списка, измените свой код следующим образом.

 if data['status'] == 404:
    print("404")
else:
    print("Not 404")
  

Комментарии:

1. Большое вам спасибо! Похоже, мне нужно уточнить, когда и где индексировать. В качестве дополнительного примечания, если URL-адрес имеет код состояния 404, urllib не может его обработать и выдает HTTPError: Not Found. В итоге я использовал requests.get().

2. Отлично, рад, что я могу помочь!