Чтение 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 шт):
Смотрите, в 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']