如何遍历每个JSON对象并点击API?

如何遍历每个JSON对象并点击API?,json,python-3.x,api,Json,Python 3.x,Api,我的代码将Excel文件转换为JSON文件,然后JSON文件点击API在我的应用程序中创建请求 我的JSON输出如下所示: { “数据”:[ { “请求启动”:“2018-11-16”, “请求完成”:“2018-11-18”, “位置”:“测试”, “设备”:“测试”, “开关ID”:1 }, { “请求启动”:“2018-11-23”, “请求完成”:“2018-11-25”, “位置”:“测试”, “设备”:“测试”, “开关ID”:1 } ] } 我的代码: def json_from

我的代码将Excel文件转换为JSON文件,然后JSON文件点击API在我的应用程序中创建请求

我的JSON输出如下所示:

{
“数据”:[
{
“请求启动”:“2018-11-16”,
“请求完成”:“2018-11-18”,
“位置”:“测试”,
“设备”:“测试”,
“开关ID”:1
},
{
“请求启动”:“2018-11-23”,
“请求完成”:“2018-11-25”,
“位置”:“测试”,
“设备”:“测试”,
“开关ID”:1
}
]
}
我的代码:

def json_from_excel():
excel_文件='test.xlsx'
jsonfile=open('ExceltoJSON.json','w')
数据=[]
loaddata=OrderedDict()
工作簿=xlrd。打开工作簿(excel文件)
工作表=工作簿。工作表按名称(“testExceldata”)
工作表=工作簿。按索引工作表(0)
对于范围(0,6)内的j:
对于范围(1,4)内的i:
温度={}
temp[“requestedStart”]=(表单元格值(i,0))
temp[“requestedComplete”]=(表单元格_值(i,1))
温度[“位置”]=(表单元格_值(i,2))
温度[“设备”]=(表单元格_值(i,3))
温度[“开关ID”]=(表单元格_值(i,4))
数据追加(临时)
loaddata['data']=数据
dump(loaddata,jsonfile,indent=3,sort\u keys=False)
jsonfile.write('\n')
返回加载数据
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
data=json\u from\u excel()
验证头={
“令牌”:“5ab15b5a66”,
“内容类型”:“应用程序/json”,
“接受”:“应用程序/json”
}
s=请求。会话()
s、 headers=AUTH_头
data=json.dumps(dict(data))
打印(数据)
url='1〕https://myurl/external/api/v1/Request'
result=s.post(url,data=data,verify=False)
打印(result.text)
s、 关闭()
但是我的API一次只能接受一个对象。所以我想创建一个循环,这样程序将获取第一个对象,即

{
“请求启动”:“2018-11-16”,
“请求完成”:“2018-11-18”,
“位置”:“测试”,
“设备”:“测试”,
“开关ID”:1
}
点击API创建请求,然后返回获取第二个对象并点击API,依此类推


如何创建这样一个循环?

您可以轻松地迭代现有的数据数组:

# 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()
时,它可以以多种方式运行

  • 数据
    是一个字典:POST表单编码数据。这与HTTP表单一起使用
  • 数据
    是一个字符串:包含您编码的数据的帖子,必须相应地设置标题
  • json
    是一个字典:使用
    application/json
    自动设置的json数据发布

这意味着您也可以使用
data=json.dumps(data)
将其作为json发送,但我建议使用
json
参数。

我尝试了这个方法。但是数据输出是单引号的。{'requestedStart':'2018-11-16T08:00:00Z','requestedComplete':'2018-11-18T17:00:00Z','location':'TAWAU','equipment':'GT2','switchOrderTypeID':1}正因为如此,它没有触及api。我需要双引号,它用单引号打印,因为这是python中字符串的默认解释。这与您的请求的发送方式无关。您的响应中到底是什么?这里的问题是data=json.dumps(dict(data))行。在原始代码中使用这一行时,我得到的数据用双引号括起来,这会命中api。但是您所说的解决方案(因为您说要删除data=json.dumps),它是用单引号打印输出。但是,如果我将data=json.dumps行与您的解决方案一起使用,我会得到这种类型的错误“字符串索引必须是整数”对不起,出于某种原因,我假设您需要表单编码值,但我相应地更新了我的答案。谢谢。它工作得很好。感谢您的宝贵建议:)