Python API请求中payload动态传值f字符串失效问题求解
问题根因
当前代码中customfields字段的值是硬编码的普通字符串,字符串内的valuetarget只是固定文本,不会自动关联外部定义的同名变量。如果f-string使用时没有正确给字符串加f前缀、没有用{}包裹变量,也无法实现动态替换。另外手动拼接JSON字符串很容易出现转义错误,当传入值包含引号、换行等特殊字符时,会直接导致JSON格式非法,接口解析失败。
推荐实现方案
优先使用Python原生数据结构构造内容,再通过json模块序列化,完全避免手动拼JSON的格式问题:
import requests import json url = "https://www.stie.com/api/conversations/KJQ-CZHNR-985/fields" valuetarget = "123" # 构造原生列表/字典结构,直接传入变量 custom_fields_structure = [ {"code": "orderno", "value": valuetarget} ] payload = { 'apikey': 'zbyc88srdi333d3dpq5lye48pgg1tfo1pnjvj65ld', 'customfields': json.dumps(custom_fields_structure, ensure_ascii=False) } files = [] headers = {} response = requests.request("POST", url, headers=headers, data=payload, files=files) print(response.text)
这种写法下,不管valuetarget是数字、字符串还是包含特殊字符的内容,json.dumps都会自动处理转义,生成符合规范的JSON字符串。
f-string的正确写法(不推荐)
如果一定要用f-string实现,需要给字符串加f前缀,变量用{}包裹,注意JSON本身的大括号需要写两次转义:
valuetarget = "123" payload = { 'apikey': 'zbyc88srdi333d3dpq5lye48pgg1tfo1pnjvj65ld', 'customfields': f'[{{"code": "orderno", "value":"{valuetarget}"}}]' }
注意:该写法容错性极差,一旦传入值包含双引号、反斜杠、换行符等特殊字符,拼接出的JSON会直接格式错误,非特殊场景不要使用。
内容的提问来源于stack exchange,提问作者Avi Coifman
相关产品推荐
相关产品推荐

