从响应解析时的Python JSON TypeError

问题描述 投票:0回答:1

我对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']))

需要进行哪些更改才能使其正常工作?谢谢!

python json google-admin-sdk admin-sdk
1个回答
1
投票

根据您提供的数据,parameters中的值是字典列表

'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']))
© www.soinside.com 2019 - 2024. All rights reserved.