[英]GET and POST in JSON using requests in Python
我正在一個項目中,必須從鏈接中獲取數據,然后從提取的數據中提取所需的信息后,再將數據發布到另一台服務器中。 我將庫請求用於我的GET和POST,這是提取所需數據的代碼:
''' original data fetched
result= {"version": "1.0","cmd":"list_metering","status":"success","devices":
[{"deviceid":"xxxxx","model":"xxxx"},{"deviceid":"xxxxx","model":"xxxx"}]} '''
for devices in result['devices']:
# delete the parameters I don't need
final_data = removekey(devices,'model')
# x.update(final_data) -> Trying dicts
# x.append(final_data) -> Trying lists
# Sending directly
resp = requests.post(url,json=final_data,headers=headers)
no+=1
if no== len(result['devices']):
break
在這里,我將調用一個函數,該函數將刪除不需要的鍵,然后其余部分將其發布。
並且我嘗試對字典使用update()函數,但是由於我具有相同的鍵,因此該鍵不起作用,因此僅考慮其中一個數據。 列出工作,但我將以這種形式獲取數據:
[{"deviceid":"xxxxx","model":"xxxx"},{"deviceid":"xxxxx","model":"xxxx"}]
我嘗試使用json = data和x.json(),但都無法使用列表。 但是,如果我由於延遲而直接發送第一個代碼中顯示的數據,那么我不確定其他什么(如果幸運的話)將發送完整的數據,否則我將丟失部分取回的數據。
在這種情況下,如何獲取json中的數據,然后再次將其發送回json中? 我的目標是將數據,所有設備打包在一起發送,這樣我就不會丟失任何數據。
這是我正在使用的GET和POST:
# GET
url_source = 'https://website'
url = requests.get(url_source)
result = url.json()
# POST
headers = {'charset':'utf-8','Content-Type':'application/json'}
url = "http://xxxx/_get_v1.php"
data = final_data
resp = requests.post(url,json=data,headers=headers)
正如我所評論的, devices
不是無效的輸入(盡管是有效的json)。 根據@ AhmedAl-haddad的回復,我們應該發送{}
格式的數據。
如果這意味着要從devices
刪除“模型”並發送更新的GET響應數據,如下所示。
# POST
headers = {'charset':'utf-8','Content-Type':'application/json'}
url = "http://xxxx/_get_v1.php"
# remove 'models'
map(lambda x: x.pop('model'), result['devices'])
# send result
resp = requests.post(url,json=result,headers=headers)
還是我們需要單獨發送device
中的devices
?
# send result
for device in result['devices']:
resp = requests.post(url,json=device,headers=headers)
如@JonDeen所述,您應該閱讀文檔以獲取更多詳細信息
您是否在問如何從字典中刪除鍵? 如果是這樣,請使用語法
del myJson["myKey"]
如果您想操作數據集並從列表或字符串重構數據集,也可以考慮使用json-API來簡化操作。
另請參閱請求文檔 ,例如有關提交json的信息。
示例(已更新,以刪除不必要的列表更新):
devices=result['devices']
for i,device in enumerate(devices):
# delete the parameters I don't need
del device['model']
resp = requests.post(url,json=devices,headers=headers)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.