【发布时间】:2019-09-16 05:52:28
【问题描述】:
我正在使用 API 来获取 JSON 结果,然后转换为 CSV。但是,我在结果中看到一些记录缺少键。结果是 CSV 的值转移到了错误的列
我已经运行了我的脚本并在 Postman 中运行了 API,并且 JSON 输出是相同的。我使用https://json-csv.com/ 将 JSON 转换为 CSV,并将其与我的输出进行比较。 https://json-csv.com/ 输出显示数据在正确的列中,让我相信后台有一些代码检测到丢失的键/值,并用空值填充它。
import json
import requests
import csv
def get_data():
group_id = 9039
api_token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxx'
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
if len(drivers) > 0:
keys = drivers[0].keys()
csvwriter.writerow(keys)
# write data
for line in drivers:
csvwriter.writerow(line.values())
csvFile.close()
text = get_data()
write_file('drivers.csv', text)
从 JSON 输出,这是部分结果。
{
"drivers": [
{
"id": 158830,
"groupId": 9039,
"vehicleId": 212014918234731,
"currentVehicleId": 212014918431705,
"username": "rdoherty",
},
{
"id": 134808,
"groupId": 9039,
"vehicleId": null,
"username": "sbermingham",
}
]
}
请注意,第二条记录没有“currentVehicleId”键:值。结果是,当我转换为 CSV 时,如果有缺失值,则所有其他值都将移动到它应该在的左侧的列中。
id groupId vehicleId currentVehicleId username
158830 9039 2.12015E+14 2.12015E+14 rdoherty
134808 9039 null sbermingham
我希望 CSV 转换确保所有缺失值都替换为 null。
【问题讨论】: