Python调用API时POST请求因数据类型不兼容失败如何修复?
问题分析与解决方案
错误提示明确指出:B1单元格预期是number类型,实际传入了string类型。问题出在你提交的results数据中,对应B1位置的值是字符串格式(比如"123"),而API要求的是数字格式(比如123)。
第一步:移除冗余的JSON序列化/反序列化操作
你的get_response函数里把response['sheets']转成JSON字符串,又在post_response里转回来,这完全没必要,还可能引入潜在类型问题。直接返回原始对象即可:
修改get_response函数:
import json import requests def get_response(): api_url = "url_link" response = requests.get(api_url).json() submission_url = response['submissionUrl'] # 直接返回原始sheets对象,无需转成JSON字符串 sheets = response['sheets'] return submission_url, sheets
对应简化post_response函数:
def post_response(): api_url, results = get_response() email = "randomemail@gmail.com" # 直接使用results,无需json.loads myobj = {"email": email, "results": results} post_data = requests.post(api_url, json=myobj) post_data.json() return post_data.text
第二步:转换B1单元格的数据类型
接下来需要定位results里对应B1单元格的值,把它从字符串转成数字(int或float,根据API需求选择)。结合错误提示里的id="2",可以针对性处理:
在post_response中添加类型转换代码:
def post_response(): api_url, results = get_response() email = "randomemail@gmail.com" # 遍历results,找到id为"2"的项,转换B1的值类型 for item in results: if item.get("id") == "2": cell_data = item.get("cells", {}) if "B1" in cell_data: try: # 转成整数,若需要浮点数则替换为float() cell_data["B1"] = int(cell_data["B1"]) except ValueError: print("B1的值无法转换为数字,请检查原始数据") myobj = {"email": email, "results": results} post_data = requests.post(api_url, json=myobj) post_data.json() return post_data.text
辅助排查建议
如果不确定results的具体结构,可以先在get_response里打印原始数据,明确B1值的位置:
def get_response(): api_url = "url_link" response = requests.get(api_url).json() print("原始sheets数据结构:", response['sheets']) # 打印查看具体结构 submission_url = response['submissionUrl'] sheets = response['sheets'] return submission_url, sheets
内容的提问来源于stack exchange,提问作者KingSkitz
相关产品推荐
相关产品推荐

