Чтение json ответа в Python

Отравляю в PAPI генерируемый запрос. Получаю ответ в виде JSON данных

id_list_sql =

  {
  "status": "ok",
  "meta": {
    "count": 100
  },
  "data": {
    "56320": {
      "global_rating": 4602,
      "clan_id": null,
      "nickname": "Zoltan",
      "account_id": 56320
    },
    "17925": {
      "global_rating": 10649,
      "clan_id": null,
      "nickname": "Dessa",
      "account_id": 17925
    }
  }
}





       
response = requests.get(id_list_sql) #открываю ответ
data = response.json()
       
for item in data['data']:
    global_rating = item['global_rating'] 
    clan_id123 = item['clan_id']
    nickname = item['nickname']

Ранее я пользовался этой структурой и она работала, а сейчас вылазит ошибка с которой я на долго встрял

Traceback (most recent call last):
global_rating = item['global_rating']
TypeError: string indices must be integers

Прошу объяснить новичку, почему лыжи не едут и как сделать что бы поехали.


Ответы (1 шт):

Автор решения: gil9red

Смотрите, в data['data'] у вас словарь, а при итерации словаря он возвращает ключи, а именно "56320" и "17925". У вас же в цикле обработка идет так, как-будто там словари, поэтому и возникает ошибка при обращении к строкам.

Вы писали, что код ранее работал, получается, раньше в "data" возвращался список ("data": [{"global_rating": 4602, ...), а теперь там словарь.

Поэтому, как вариант, вы можете сразу список значений словаря запросить через values (а если нужен и ключ, и значение словаря, то вместо values используйте items):

data = response.json()
       
for item in data['data'].values():
    global_rating = item['global_rating'] 
    clan_id123 = item['clan_id']
    nickname = item['nickname']

PS.

Без values у вас было бы так:

for k in data['data']:
    item = data['data'][k]
    global_rating = item['global_rating'] 
    clan_id123 = item['clan_id']
    nickname = item['nickname']
→ Ссылка