You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python发送JSON格式POST请求时如何正确保留转义反斜杠

问题原因

你看到的反斜杠“丢失”本质是认知误区导致的:

  • Python字典的打印输出(即你看到的{'id': '12345asdf', 'tag': '"8522e2de632040fc728440da7b23806a"'})是字典对象的原生内存表示,不是最终发出去的JSON报文。JSON规范要求字符串内的双引号必须用\转义,这层转义是序列化阶段自动添加的,不会提前出现在Python字典的存储值里。
  • Python字符串字面量中\"是转义序列,实际代表的字符是双引号"本身,如果你需要反斜杠作为tag值的业务内容,需要额外对反斜杠做转义。
解决方案

根据实际需求选择对应写法即可:

场景1:需要标准JSON格式(tag值为双引号包裹的字符串,和你给出的目标JSON一致)

这种情况核心逻辑本身是正确的,只是校验对象看错了。更推荐用requests自带的json参数发送请求,不需要手动做JSON序列化,还会自动设置正确的Content-Type: application/json请求头:

import requests

data = {"id": "12345asdf", "tag": "\"8522e2de632040fc728440da7b23806a\""}
resp = requests.post('https://site.com/splash', json=data)

# 打印真实发送的请求体验证,输出和要求的目标数据完全一致
print(resp.request.body)

运行后打印的请求体里\\"是Python字节串的表示方式,实际报文内容就是\",完全符合JSON规范要求。

场景2:接口要求tag值本身包含反斜杠(反斜杠是业务内容,不是JSON转义符)

如果接口要求tag字段的实际内容就是\"8522e2de632040fc728440da7b23806a\"(反斜杠是值的一部分),定义字符串时需要对反斜杠本身做转义,两种写法都可以:

import requests

# 写法1:手动转义反斜杠
data = {"id": "12345asdf", "tag": "\\\"8522e2de632040fc728440da7b23806a\\\""}
# 写法2:用原始字符串避免转义混乱
# data = {"id": "12345asdf", "tag": r'\"8522e2de632040fc728440da7b23806a\"'}

resp = requests.post('https://site.com/splash', json=data)
print(resp.request.body)
注意事项
  • 校验请求格式不要直接打印Python字典,最准确的方式是查看response.request.body的实际内容,避免被不同场景下的转义规则误导。
  • 不要手动拼接JSON字符串,也尽量不要自己传data=json.dumps(xxx),用requests内置的json参数可以避免绝大多数JSON序列化格式问题。

内容的提问来源于stack exchange,提问作者le ra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 01:27:28