如何在Python中动态修改JSON请求负载中的值?

作者站长头像
站长
· 阅读数 14

Python中发送post请求,构建请求体的时候请求负载如下,如何在Python中动态修改JSON请求负载中的值?关键的地方就是那个value的值,直接发送那个value可以,我想要根据变量修改里边的信息。用的方法是

addressvalue = f"{{\"address\":\"{address}\",\"longitude\":{longitude},\"latitude\":{latitude},\"province\":\"{province}\",\"city\":\"{city}\",\"region\":\"{region}\"}}"

接口没报错,但是后端处理后是海外、海外、详细地址.......,我猜应该是分割字符串的问题,我直接发送原本的写死的串就没问题。求解。

用json.dumps转整个结构体,然后发送直接报500,根据ChatGPT的思路只将这个键的值改为JSON字符串的格式,直接发送就成功.....但是用字典构建这个值,再只将值转JSON,再发送就不行。(1)尝试修改字符串再转为JSON(失败)

    replacement_map = {
        "金花街道高第坊39号荔湾区金花街锦绣社区": address,
        "113.252272": longitude,
        "23.127255": latitude,
        "广东省": province,
        "广州市": city,
        "荔湾区": region
    }

    # 遍历替换
    for key, value in replacement_map.items():
        data_rigth["shopAttrRespList"][0]["child"][0]["child"][0]["value"] = \
        data_rigth["shopAttrRespList"][0]["child"][0]["child"][0]["value"].replace(key, value)
    # 转为JSON格式
    data_rigth["shopAttrRespList"][0]["child"][0]["child"][0]["value"] = json.dumps(
        json.loads(data_rigth["shopAttrRespList"][0]["child"][0]["child"][0]["value"]), ensure_ascii=False)

(1)尝试修改字典再转为JSON(失败)

 addressvalue_dict = {'address': address, 'longitude':longitude, 'latitude': latitude, 'province': province,
                         'city': city, 'region': region}  
data_rigth["shopAttrRespList"][0]["child"][0]["child"][0]["value"] = json.dumps(addressvalue_dict, ensure_ascii=False)
 response = session.post(url, json=data_rigth, headers=headers, cookies=cookies)

我想要根据变量修改里边的信息,并使后端成功分割。

回复
1个回答
avatar
test
2024-06-23

已解决,原因是那个value的值在浏览器中进行了两次JSON转码,要想在Python中模拟请求,需要同样对这个值进行两次JSON转码。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容