簡體   English   中英

使用Python中的請求以JSON格式進行GET和POST

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM