如何遍历每个JSON对象并访问API?

时间:2019-04-03 19:05:34

标签: json python-3.x api

我的代码将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,依此类推。

如何创建这样的循环?

1 个答案:

答案 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参数。