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

Python中发送post请求,构建请求体的时候请求负载如下,
image.png
关键的地方就是那个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)

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

阅读 986
avatarAI BotBETA

在你的问题中,你正在尝试构建一个JSON字符串,然后想要通过变量动态修改其中的值。然而,你发现直接发送JSON字符串有效,但尝试使用Python的json.dumps或字典构建方法时却遇到了问题。

问题的根源可能在于,当你尝试将JSON字符串手动拼接时,可能会产生格式错误,这可能会导致后端无法正确解析。此外,如果后端期望接收一个有效的JSON对象,而不仅仅是一个JSON格式的字符串,那么使用json.dumps或字典构建方法可能会更有效。

下面是一个使用Python字典和json.dumps来动态修改JSON请求负载中值的示例:

import json

# 初始化一个字典来存储你的数据
data = {
    "address": "初始地址",
    "longitude": 123.456,
    "latitude": 78.901,
    "province": "初始省份",
    "city": "初始城市",
    "region": "初始区域"
}

# 使用变量来更新字典中的值
address = "新的地址"
longitude = 111.222
province = "新的省份"

data["address"] = address
data["longitude"] = longitude
data["province"] = province

# 将字典转换为JSON字符串
json_data = json.dumps(data)

# 现在你可以使用json_data作为你的POST请求负载

在这个示例中,我们首先创建了一个包含初始数据的字典。然后,我们使用变量来更新字典中的值。最后,我们使用json.dumps将字典转换为JSON字符串。这样,你就可以在需要时动态地修改JSON请求负载中的值,并且确保生成的JSON字符串格式正确。

如果你在使用这种方法时仍然遇到问题,那么问题可能在于后端的处理逻辑。你可能需要检查后端的代码,看看它期望接收什么样的数据格式,或者联系后端的开发者以获取更多帮助。

1 个回答
✓ 已被采纳

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题