Но теперь announcement это строка, представляющая больше данных JSON. Я не могу продолжить индексирование announcement['content'] результатов в TypeError: string indices must be integers.
Как я могу получить желаемую строку "правильным" способом, т. Е. С учетом фактической структуры данных?
Переведено автоматически
Ответ 1
В одной строке -
>>> json.loads(data['data']['video_info'][0]['announcement'])['content'] 'FOLLOW ME PLEASE'
Чтобы помочь вам понять, как получить доступ к данным (чтобы вам не приходилось переспрашивать), вам нужно просмотреть свои данные.
Сначала давайте красиво расположим ваши данные. Вы можете использовать json.dumps(data, indent=4), или вы можете использовать онлайн-инструмент, такой как JSONLint.com.
*** Обратите внимание, что данные в announcement ключе на самом деле больше данных json, которые я разместил в отдельных строках.
Сначала выясните, где находятся ваши данные. Вы ищете данные в content ключе, доступ к которым осуществляется с помощью announcement ключа, который является частью словаря внутри списка dicts , доступ к которому может быть получен с помощью video_info ключа, к которому, в свою очередь, обращается data.
Итак, вкратце, "спуститесь" по лестнице, которая является "данными", используя следующие "ступени" -
data, словарь
video_info, список dicts
announcement, dict в первом dict списка dicts
content находится как часть данных json.
Первый,
i = data['data']
Далее,
j = i['video_info']
Далее,
k = j[0] # since this is a list
Если вам нужен только первый элемент, этого достаточно. В противном случае вам нужно будет выполнить итерацию:
for k in j: ...
Далее,
l = k['announcement']
Теперь, l это данные JSON. Загрузите их -
import json m = json.loads(l)
Наконец,
content = m['content']
print(content) 'FOLLOW ME PLEASE'
Мы надеемся, это послужит руководством, если у вас возникнут подобные запросы в будущем.
Ответ 2
У вас есть вложенные данные JSON; строка, связанная с 'annoucement' ключом, сама по себе является другим, отдельным встроенным документом JSON.