Как извлечь данные из JSON с помощью Python - PullRequest
0 голосов
/ 23 мая 2018

Я не совсем уверен, как бы я использовал этот вывод json, чтобы перечислить их в python, я имею в виду их циклический цикл и сбор информации из вывода JSON?

Вывод JSON по адресу: https://hastebin.com/riroteqiso.json (Данные получены из Ombi API, который использует Traktr в качестве провайдера.)

Фрагмент кода:

request_headers = {'apiKey': pmrs_api_token, 'content-type': 'application/json'}
        async with aiohttp.ClientSession() as ses:
            async with ses.get(pmrs_full_endpoint, headers=request_headers) as response:
                a = await response.json()
                for entry in (a['response']):
                    print(entry)

Отслеживание ошибок:

Traceback (most recent call last):
  File "/home/sm/.local/lib/python3.6/site-packages/discord/ext/commands/core.py", line 50, in wrapped
    ret = yield from coro(*args, **kwargs)
  File "/home/sm/Programming/Python/Discord-Bots/Plex-bot/cogs/ombi.py", line 85, in populartv
    for entry in (a['response']):
TypeError: list indices must be integers or slices, not str

РЕДАКТИРОВАТЬ:

Это было исправлено путем изменения, как предложено, но теперь у меня есть другая проблема.

async with aiohttp.ClientSession() as ses:
        async with ses.get(pmrs_full_endpoint, headers=request_headers) as response:
            a = await response.json()
            for entry in a:
                b = await response.json()
                print(type(b)) # Outputs <class 'list'>
                title = (b[entry]['title'])
                first_aired = (b[entry]['firstAired'])
                desc = (b[entry]['overview'])

Выдает мне ошибку относительно типа снова ...: /

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Это должно исправить вашу ошибку.Вам не нужен новый объект b.Переменная 'entry' будет содержать элемент внутри списка, в этом случае это будет объект словаря внутри списка.Поэтому вы можете просто извлечь значение с помощью entry['title'].

async with aiohttp.ClientSession() as ses:
    async with ses.get(pmrs_full_endpoint, headers=request_headers) as response:
        a = await response.json()
        for entry in a:
            title = entry['title']
            first_aired = entry['firstAired']
            desc = entry['overview']
0 голосов
/ 23 мая 2018

Вы должны изменить:

for entry in (a['response']):

По:

for entry in a:
...