将JSON结果保存到CSV

时间:2019-03-06 22:09:22

标签: python python-3.x rest api

因此,我要从具有字典和多个列表的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']]])

我只是开始将用户名和first_name添加到CSV中,但我不断收到错误消息:

KeyError: 'Robert'

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

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

2 个答案:

答案 0 :(得分:1)

我想你的意思是

while sleep 5; do
    lscpu | awk -F':[[:blank:]]+' '$1 == "CPU MHz" {print $2}'
    awk '$1 == "cpu" {printf "%.4f%%\n", ($2+$4)*100/($2+$4+$5)}' /proc/stat
done | paste - -

答案 1 :(得分:1)

您正在取消引用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']])