在 JSON 中使用 Python 中的请求进行 GET 和 POST



>我正在做一个项目,我必须从链接中获取数据,然后在从获取的数据中提取所需的信息后将数据发布到另一个服务器中。我正在使用我的 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)

相关内容

  • 没有找到相关文章

最新更新