
当变量中已存有含转义字符的 JSON 字符串(如 {"key": "val"}),无需使用 r'' 原始字符串字面量,只需确保该字符串内容本身已正确转义(例如双引号和反斜杠已按 Python 字符串规则处理),即可直接传给 requests.post(data=...)。
当变量中已存有含转义字符的 json 字符串(如 `{"key": "val"}`),无需使用 `r''` 原始字符串字面量,只需确保该字符串内容本身已正确转义(例如双引号和反斜杠已按 python 字符串规则处理),即可直接传给 `requests.post(data=...)`。
在 Python 中,r'...'(原始字符串字面量)仅影响源代码层面的字符串解析:它让反斜杠 不再作为转义字符(如 r'
' 表示两个字符 和 n,而非换行符)。但一旦字符串被赋值给变量(无论是否用 r'' 定义),Python 解释器已将其编译为内存中的实际字符串对象——此时“原始性”已不复存在,后续操作只与字符串的实际内容有关。
因此,若你已有如下变量:
data_str = '{"desc":"a man walking","useOriginPrompt":false,"fileList":[],"modelID":"23010","quantity":"1","extra":{"promptStruct":"{\"value\":[{\"type\":\"paragraph\",\"children\":[{\"text\":\"a man walking\"}]}],\"length\":13,\"plainLength\":13,\"rawLength\":13}"}}'
✅ 这个字符串已经包含了正确的双反斜杠 \"(即每个 " 在 JSON 内层结构中被转义为 ",而 Python 普通字符串需用 \ 表示一个字面反斜杠),可直接用于请求:
response = requests.post(
"https://theapi.com/api/multimodal/generate/video",
params=params,
cookies=cookies,
headers=headers,
data=data_str # 直接传入,无需额外包装或转换
)
⚠️ 注意事项:
-
不要对已有变量再套
r'':r''是字面量语法,不能用于运行时变量(如r'{data_str}'会报错)。 -
验证字符串内容是否正确:可通过
print(repr(data_str))查看其真实转义形式,确保内层 JSON 的双引号、反斜杠等已按需转义。 -
更推荐的方式是避免手动拼接 JSON 字符串:使用
json.dumps()生成合法 JSON,并设置ensure_ascii=False和separators=(',', ':')以控制格式:
import json
payload = {
"desc": "a man walking",
"useOriginPrompt": False,
"fileList": [],
"modelID": "23010",
"quantity": "1",
"extra": {
"promptStruct": json.dumps({
"value": [{"type": "paragraph", "children": [{"text": "a man walking"}]}],
"length": 13,
"plainLength": 13,
"rawLength": 13
}, ensure_ascii=False)
}
}
data_str = json.dumps(payload, ensure_ascii=False)
这样既安全又可读,彻底规避手动转义错误风险。
总结:r'' 只是定义字符串时的语法糖;只要变量中存储的字符串内容符合目标 API 所需的原始 JSON 格式(包括必要的转义),就可直接传入 requests 的 data 参数——无需任何“转换为 raw”的运行时操作。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











