Python 通过JSON数组循环到API
我是Python新手,我的代码面临问题 我获取数据并将其转换为JSON格式,并将数据存储在一个变量中 打印(数据)的输出为 我想删除[(开始时)和](结束时) 我已尝试使用newdata=data[1:-1],但它正在返回[] 我需要发送这些地段的API,我应该这样做每一个地段,并通过循环的地段 我得到了这些地段的计数(上面的代码是6) 如果我传递该批次的数据,则以下代码适用于一个批次(ad96-5a8f-4dad-9fad-ba93f682d8b5)Python 通过JSON数组循环到API,python,json,api,loops,Python,Json,Api,Loops,我是Python新手,我的代码面临问题 我获取数据并将其转换为JSON格式,并将数据存储在一个变量中 打印(数据)的输出为 我想删除[(开始时)和](结束时) 我已尝试使用newdata=data[1:-1],但它正在返回[] 我需要发送这些地段的API,我应该这样做每一个地段,并通过循环的地段 我得到了这些地段的计数(上面的代码是6) 如果我传递该批次的数据,则以下代码适用于一个批次(ad96-5a8f-4dad-9fad-ba93f682d8b5) import requests url
import requests
url = "url/api /notify/lot/ ad96-5a8f-4dad-9fad-ba93f682d8b5"
payload = '{"lot_no":"07f-fdf3-4fdf-9fa7-32b6b92fb477",,"lot_status":"pending","recipients":[{},{}]}',
headers = {
'Content-Type': "application/json",
'Authorization': inputtokenhere,
'User-Agent': "PostmanRuntime/7.3",
'Accept': "*/*",
'Cache-Control': "no-cache",
'Host': "ext-api-support-int.godrej.com",
'Accept-Encoding': "gzip, deflate",
'Content-Length': "697",
'Connection': "keep-alive",
'cache-control': "no-cache"
}
response = requests.request("PUT", url, data=payload, headers=headers)
print(response.text)
我希望在API代码中循环每个批次的详细信息,我如何才能做到这一点?您可以从JSON字符串中创建一个数组,但是在提供的示例中,它的JSON格式不正确 将JSON字符串转换为数组:
导入json
json_字符串='[{}]'
data=json.loads(x)
打印(数据)
之后,您可以循环遍历数组元素并执行必要的操作。如果您有包含许多项的列表,则使用
for
-loop分别获取每个项并发送它
编辑:我添加了从字符串中获取批号的代码,并与url
一起使用。它需要在项中用单个,
替换双,,
,以创建正确的JSON数据
data = ['{"lot_no":"4f64-b946-d71fdf14f3ae",,"batch_status":"pending","recipients":[{},{}]}',
'{"lot_no":"1b5a-c5fc-41ac-b798-b7afd835e8c6",,"lot_status":"pending","recipients":[{"acocunt":"-370816706760555322764049398323519400","snp":"456786545678","tracking_code":"User1","template_id":1,"communication_type":"phone",,"lang":"en",,"template_data":{"price":"12.34","paymentType":"visa"}},{"acocunt":"56785678976576545678","snp":"456786545678","tracking_code":"1256","template_id":1,"communication_type":"phone",,"lang":"en","template_data":{"price":"94.27","paymentType":"cash"}}]}',
'{"lot_no":"ad96-5a8f-4dad-9fad-ba93f682d8b5",,"lot_status":"pending","recipients":[{"acocunt":"-3708167062764049398323519400","snp":"456786545678","tracking_code":"User1","template_id":1,"communication_type":"phone",,"lang":"en",,"template_data":{"price":"12.34","paymentType":"visa"}},{"acocunt":"56785654567876545678","snp":"456786545678","tracking_code":"2568","template_id":1,"communication_type":"phone",,"lang":"en","template_data":{"price":"94.27","paymentType":"cash"}}]}',
'{"lot_no":"07f-fdf3-4fdf-9fa7-32b6b92fb477",,"lot_status":"pending","recipients":[{},{}]}',
'{"lot_no":"1eae1-0644-489c-917c-f7de7751fac9",,"lot_status":"pending","recipients":[{},{}]}',
'{"lot_no":" -fb29-44d7-a5c8-7ee1a55e8fe3",,"lot_status":"pending","recipients":[{},{}]}']
import json
for item in data:
d = json.loads(item.replace(',,', ','))
lot = d['lot_no']
print(lot)
#lot = item.split(':')[1].split(',')[0].strip('"')
#print(lot)
url = "url/api/notify/lot/" + lot
response = requests.put(url, data=item, headers=headers)
print(response.text)
列表中的字符串似乎不是有效的JSON。数据是列表,因此print()
将始终显示[]
,通知您它显示列表,但这些字符不是数据的一部分。对数据中的有效负载使用:request.put(…data=payload)
这一个对我有效。。。。Data_new=str(Data)[1:-1]不将其转换为字符串,而是使用for
-直接与Data
-循环,用于数据:请求中的有效负载。put(…数据=有效负载)
。似乎你不知道如何使用列表/数组。我必须在每次迭代中动态地将lot\ U no传递给URL。还有吗?url=“url/api/notify/lot/ad96-5a8f-4dad-9fad-ba93f682d8b5”url是一个字符串,因此您可以使用所有字符串函数,如连接“url”+“lot”
或字符串格式化“url{}”。格式(“lot”)
或Python 3.6或3.7 f-stringf“url{item}”
。列表中的项目也是字符串,所以您也可以使用字符串函数获取值-例如,拆分(':')
,拆分(',')
,等等。您可以尝试lot=item.split(':')[1].split(',')[0].strip('“'))
如果将double,
替换为single,
则可以获得正确的JSON数据,然后可以将其转换为Python字典并从字典中获取lot
:d=JSON.loads(item.replace(“,”,“,”)
和lot=d['lot\u no']
非常感谢Furus。我是新手,我可以知道如何将此标记为正确答案吗?
data = ['{"lot_no":"4f64-b946-d71fdf14f3ae",,"batch_status":"pending","recipients":[{},{}]}',
'{"lot_no":"1b5a-c5fc-41ac-b798-b7afd835e8c6",,"lot_status":"pending","recipients":[{"acocunt":"-370816706760555322764049398323519400","snp":"456786545678","tracking_code":"User1","template_id":1,"communication_type":"phone",,"lang":"en",,"template_data":{"price":"12.34","paymentType":"visa"}},{"acocunt":"56785678976576545678","snp":"456786545678","tracking_code":"1256","template_id":1,"communication_type":"phone",,"lang":"en","template_data":{"price":"94.27","paymentType":"cash"}}]}',
'{"lot_no":"ad96-5a8f-4dad-9fad-ba93f682d8b5",,"lot_status":"pending","recipients":[{"acocunt":"-3708167062764049398323519400","snp":"456786545678","tracking_code":"User1","template_id":1,"communication_type":"phone",,"lang":"en",,"template_data":{"price":"12.34","paymentType":"visa"}},{"acocunt":"56785654567876545678","snp":"456786545678","tracking_code":"2568","template_id":1,"communication_type":"phone",,"lang":"en","template_data":{"price":"94.27","paymentType":"cash"}}]}',
'{"lot_no":"07f-fdf3-4fdf-9fa7-32b6b92fb477",,"lot_status":"pending","recipients":[{},{}]}',
'{"lot_no":"1eae1-0644-489c-917c-f7de7751fac9",,"lot_status":"pending","recipients":[{},{}]}',
'{"lot_no":" -fb29-44d7-a5c8-7ee1a55e8fe3",,"lot_status":"pending","recipients":[{},{}]}']
import json
for item in data:
d = json.loads(item.replace(',,', ','))
lot = d['lot_no']
print(lot)
#lot = item.split(':')[1].split(',')[0].strip('"')
#print(lot)
url = "url/api/notify/lot/" + lot
response = requests.put(url, data=item, headers=headers)
print(response.text)