首页 > 解决方案 > 将 JSON 结果保存到 CSV

问题描述

所以我从一个包含字典和多个列表的 API 中提取 JSON 格式的数据。我提取的数据被正确解析和打印,将其保存在 CSV 中是个问题。

r=requests.get(url,headers=header)
result=r.json()
for log in result['logs']:
    print('Driver ID: ', log['log']['driver']['username'])
    print('First Name: ', log['log']['driver']['first_name'])
    print('Last Name: ', log['log']['driver']['last_name'])
    for event in log['log']['events']:
        print('ID: ', event['event']['id'])
        print('Start Time: ', event['event']['start_time'])
        print('Type: ', event['event']['type'])
        print('Location: ', event['event']['location'])
with open ('data.csv','w') as csvfile:
    f=csv.writer(csvfile)
    f.writerow(['username','first_name'])
    for elem in result['logs']:
        f.writerow([elem['log']['driver']['username']],elem[log['log']['driver']['first_name']]])

我只是开始将用户名和名字添加到 CSV 中,但我一直收到一条错误消息:

KeyError: 'Robert'

请务必注意,“罗伯特”不是用户名,而是名字。另外,这是JSON响应中的最后一个结果,逻辑不应该从顶部开始吗?关于如何解决它的任何想法?

这是我从中获取数据的 API,端点是 /logs:https://developer.keeptruckin.com/reference#get-logs

标签: pythonpython-3.xrestapi

解决方案


您正在取消引用 elem[log['log']] 而不是 elem['log']

- f.writerow([elem['log']['driver']['username']],elem[log['log']['driver']['first_name']]])
+ f.writerow([elem['log']['driver']['username'],elem['log']['driver']['first_name']])

推荐阅读