Ошибка типа: строковые индексы должны быть целыми числами JSON

#python #json #webhooks

#python #json #webhooks

Вопрос:

Я борюсь с фильтрацией данных json из webhook. Я не слишком уверен, что здесь неверно / неправильно:

 headers = {
    'client-id': 'my twitch client id',
    'Authorization': 'my twitch oauth key',
}

params = (
    ('query', x),
)

response = requests.get('https://api.twitch.tv/helix/search/channels', headers=headers, params=params)

final = response.text["is_live"]

print(final)
 

Это выдает ошибку:

Ошибка типа: строковые индексы должны быть целыми числами

Однако я не уверен, как я мог бы превратить данные json из webhook в interger?

РЕДАКТИРОВАТЬ: запрос ‘x’ извлекается из моего MongoDB и работает нормально.

response.text возвращает:

 {"data":[{"broadcaster_language":"en","display_name":"foxygaming09","game_id":"32982","id":"87678172","is_live":false,"tag_ids":[],"thumbnail_url":"https://static-cdn.jtvnw.net/jtv_user_pictures"}]
 

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

1. Используйте response.json вместо response.text

2. TypeError: json() takes 1 positional argument but 2 were given

3. Я уверен, что я бы превратил данные json из webhook в целое число Вы уверены, что проблема связана с тем, что данные запроса не являются int?

4. @AMC, формат / тип данных кажется нормальным. Я просто не знаю, как бы я отфильтровал определенную его часть. Даже если это не int, есть ли способ обойти это?

5. @Pois Я говорю об ошибке типа, о которой вы рассказали выше.

Ответ №1:

Обнаружена проблема, пожалуйста, используйте.

То, что возвращается, — это JSON.

Следует использовать .json() .

И выполнять манипуляции с данными.

 final = response.json()
 

final = {"data":[{"broadcaster_language":"en","display_name":"","game_id":"","id":"","is_live":false,"tag_ids":[],"thumbnail_url":""}]

 print(final['data'][0]['is_live'])
 

вывод

 false
 

Я могу это сделать, если предоставленный вами response.text неверен.

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

1. привет, это приводит к синтаксической ошибке в апострофах, граничащих с данными.

2. ОК. Это может быть потому, что я плохо понимаю ваш английский, я думал, вы просто хотите получить значение ['is_live'] .

3. да, я только хочу получить значение его live.

4. Но при использовании указанного вами кода выше появляется синтаксическая ошибка.

5. final = {"data":[{"broadcaster_language":"en","display_name":"","game_id":"","id":"","is_live":false,"tag_ids":[],"thumbnail_url":""}] print(final'data'][0]['is_live']) вывод -> false