Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过JSON数组循环到API_Python_Json_Api_Loops - Fatal编程技术网

Python 通过JSON数组循环到API

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

我是Python新手,我的代码面临问题

我获取数据并将其转换为JSON格式,并将数据存储在一个变量中

打印(数据)的输出为

我想删除[(开始时)和](结束时)

我已尝试使用newdata=data[1:-1],但它正在返回[]

我需要发送这些地段的API,我应该这样做每一个地段,并通过循环的地段

我得到了这些地段的计数(上面的代码是6)

如果我传递该批次的数据,则以下代码适用于一个批次(ad96-5a8f-4dad-9fad-ba93f682d8b5)

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-string
f“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)