Python变量在API POST请求中自动添加双引号问题排查
首先咱们来捋清楚问题根源:你读取到的v_order_nbr_lst是一个字符串(比如'123','345','567'),当把它放进POST请求的postdata时,如果用了JSON自动序列化(比如requests.post的json参数),Python会自动给字符串套上双引号来符合JSON格式规范——这就是你看到额外双引号的原因。
根据你的需求,这里有几种针对性的解决办法:
办法1:把字符串转成实际的Python列表(推荐)
如果接口期望接收的是订单号数组,那你应该把读取到的字符串转换成真正的列表,而不是保留字符串格式。修改你的文件读取代码:
fileHandle = open('input_file.txt','r') for line in fileHandle.readlines(): line = line.rstrip('\n') fields = line.split('|') # 拆分带单引号的字符串,同时去掉每个元素的单引号,转成列表 v_order_nbr_lst = [num.strip("'") for num in fields[0].split(',')]
这样v_order_nbr_lst就变成了['123', '345', '567'],之后放进POST的json参数里时,会被序列化为标准的JSON数组["123","345","567"],既符合格式规范,也不会有多余引号的问题。
办法2:直接构造原始请求体(适合非JSON接口)
如果接口确实要求接收'123','345','567'这种带单引号的原始字符串(不带外层双引号),那你需要手动构造请求体,不要依赖自动序列化:
import requests # 假设接口需要JSON格式,但字段值就是原始带单引号的字符串 post_body = f'{{"order_numbers": {v_order_nbr_lst}}}' headers = {'Content-Type': 'application/json'} response = requests.post(your_api_url, data=post_body, headers=headers)
如果是表单提交(Content-Type为application/x-www-form-urlencoded),直接把字符串放进data字典即可:
postdata = {'order_numbers': v_order_nbr_lst} response = requests.post(your_api_url, data=postdata)
这种方式下,表单数据会以order_numbers='123','345','567'的形式发送,不会自动添加双引号。
办法3:明确处理JSON序列化
如果你用的是requests库,之前用json=postdata导致自动加引号,换成data参数并手动处理序列化:
import json # 外层双引号是JSON的语法要求,后端读取时会自动忽略,拿到的就是你原始的带单引号字符串 postdata = {"order_numbers": v_order_nbr_lst} response = requests.post(your_api_url, data=json.dumps(postdata), headers={'Content-Type': 'application/json'})
这种情况完全符合JSON规范,后端解析字段值时,得到的就是你想要的'123','345','567',外层双引号只是JSON的语法包裹,不会作为值的一部分。
内容的提问来源于stack exchange,提问作者rkj

