如何在Python中动态修改JSON请求负载中的值?
Python中发送post请求,构建请求体的时候请求负载如下,关键的地方就是那个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个回答

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

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