Python JSON TypeError при разборе ответа - PullRequest
0 голосов
/ 07 апреля 2020

Я не очень разбираюсь в python и нашел пример, который бы служил моей цели с некоторыми изменениями, в настоящее время пытаюсь проанализировать некоторые данные из ответа на запрос GET, и я продолжаю получать эту ошибку:

"activity['parameters']['initValue']))
TypeError: list indices must be integers or slices, not strTypeError: list indices must be integers or slices, not str"

JSON ответ выглядит следующим образом:

{'kind': 'admin#reports#usageReports', 'etag': '"xxxxxxxxx/xxxxxxxxxxxx"', 'usageReports': [{'kind': 'admin#reports#usageReport', 'date': '2019-09-01', 'etag': '"xxxxxxxxx/xxxxxxxx"', 'entity': {'type': 'CUSTOMER', 'customerId': 'xxxxxxxx'}, 'parameters': [{'name': 'gmail:num_30day_active_users', 'intValue': '1234'}]}]}

Python Код:

    result = service.customerUsageReports().get(date='2019-09-01', parameters='gmail:num_30day_active_users').execute()

    results = result.get('usageReports', [])
    if not results:
         print('No data found.')
    else:
        print('Usage:')
        for activity in results:
            print(u'{0}: {1}'.format(activity['parameters'],
                activity['parameters']['intValue']))

Что необходимо изменить, чтобы оно заработало? Спасибо!

1 Ответ

1 голос
/ 07 апреля 2020

из предоставленных вами данных, значение в parameters представляет собой список dict

'parameters': [{'name': 'gmail:num_30day_active_users',
    'intValue': '1234'}]}  

, поэтому вам нужно перебрать все элементы в списке

result = service.customerUsageReports().get(date='2019-09-01', parameters='gmail:num_30day_active_users').execute()

results = result.get('usageReports', [])
if not results:
     print('No data found.')
else:
    print('Usage:')
    for activity in results:
       for line in activity['parameters']:
          print(u'{0}: {1}'.format(activity['parameters'],
            line['initValue']))
...