我的代码将Excel文件转换为JSON文件,然后JSON文件点击API以在我的应用程序中创建请求。
我的JSON输出如下:
{
"data": [
{
"requestedStart": "2018-11-16",
"requestedComplete": "2018-11-18",
"location": "Test",
"equipment": "Test",
"switchID": 1
},
{
"requestedStart": "2018-11-23",
"requestedComplete": "2018-11-25",
"location": "Test",
"equipment": "Test",
"switchID": 1
}
]
}
我的代码:
def json_from_excel():
excel_file = 'test.xlsx'
jsonfile = open('ExceltoJSON.json', 'w')
data = []
loaddata = OrderedDict()
workbook = xlrd.open_workbook(excel_file)
worksheet = workbook.sheet_by_name('testExceldata')
sheet = workbook.sheet_by_index(0)
for j in range(0, 6):
for i in range(1, 4):
temp = {}
temp["requestedStart"] = (sheet.cell_value(i, 0))
temp["requestedComplete"] = (sheet.cell_value(i, 1))
temp["location"] = (sheet.cell_value(i, 2))
temp["equipment"] = (sheet.cell_value(i, 3))
temp["switchID"] = (sheet.cell_value(i, 4))
data.append(temp)
loaddata['data'] = data
json.dump(loaddata, jsonfile, indent=3, sort_keys=False)
jsonfile.write('\n')
return loaddata
if __name__ == '__main__':
data = json_from_excel()
AUTH_HEADERS = {
'Token': '5ab15b5a66',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
s = requests.session()
s.headers = AUTH_HEADERS
data = json.dumps(dict(data))
print (data)
url = 'https://myurl/external/api/v1/Request'
result = s.post(url, data=data, verify=False)
print(result.text)
s.close()
但是我的API一次只能接受一个对象。所以我想创建一个循环,使程序将接收第一个对象,即
{
"requestedStart": "2018-11-16",
"requestedComplete": "2018-11-18",
"location": "Test",
"equipment": "Test",
"switchID": 1
}
然后点击API创建请求,然后返回以获取第二个对象并点击API,依此类推。
如何创建这样的循环?
答案 0 :(得分:1)
您可以轻松地遍历所拥有的数据数组:
# data = json.dumps(dict(data)) -- this is not needed
url = 'https://myurl/external/api/v1/Request'
for post_data in data['data']:
result = s.post(url, json=post_data, verify=False)
print(result.text)
s.close()
使用session.post()
时,它可以表现多种方式,see the docs。
data
是一个字典:POST形式编码的数据。这用于HTTP表单data
是一个字符串:POST由您编码,数据必须相应地设置标题json
是一个字典:带有JSON数据且自动设置application/json
的POST 这意味着您也可以执行data=json.dumps(data)
并将其作为JSON发送,但是我建议使用json
参数。