Я использую скрипт Python для запуска API, чтобы получить контент JSON и сохранить его как CSV.Однако данные записываются в неправильные столбцы.Я обнаружил, что данные в JSON не всегда имеют одинаковые ключи.В результате данные записываются в неправильный столбец в файле CSV.
Я попытался явно определить ключи, но у меня возникла та же проблема.Я уверен, что я делаю очень простую ошибку.
import json
import requests
import csv
def get_data():
group_id = 9039
api_token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx'
api_url = 'https://api.samsara.com/v1'
endpoint_url = api_url + '/fleet/drivers'
my_params = {"access_token": api_token}
my_data = {"groupId": group_id}
resp = requests.post(url = endpoint_url, params = my_params, json = my_data)
array = resp.json()
text = json.dumps(array)
return text
def write_file(filename, text):
dataset = json.loads(text)
drivers = dataset['drivers']
csvFile = open(filename,'w')
csvwriter = csv.writer(csvFile)
# write header
driver_keys = ["id","groupId","vehicleId","currentVehicleId","username"]
for d in drivers:
for key in d.keys():
if key not in driver_keys:
driver_keys.append(key)
csvwriter.writerow(driver_keys)
# write data
for line in drivers:
for key in driver_keys:
if key not in line.keys():
line[key] = None #line[key] = '' if you like
csvwriter.writerow(line.values())
csvFile.close()
text = get_data()
write_file('drivers.csv', text)
Вот частичный вывод, показывающий проблему.Обратите внимание, что если не указан параметр vehicleId или currentVehicleID, мне нужно значение NULL или ''.
id,groupId,vehicleId,currentVehicleId,username
321680,9039,,212014918234501,awinchell
91907,9039,,abrauer
134763,9039,212014918234742,abarbosa
134767,9039,212014918234707,212014918234707,ctoepfer
Это то, что я ищу.
id,groupId,vehicleId,currentVehicleId,username
321680,9039,,212014918234501,awinchell
91907,9039,,,abrauer
134763,9039,,212014918234742,abarbosa
134767,9039,212014918234707,212014918234707,ctoepfer