使用Python requests读取CSV单元格JSON执行POST API测试的格式报错问题
问题根因
报错核心是requests库参数使用错误:json参数要求传入Python原生的字典/列表对象,你直接传入从CSV读取的JSON格式字符串,会触发requests自动将字符串再次序列化,后端最终收到的是被包裹的纯字符串,无法解析出name/email等字段,因此返回字段为空的错误。
手动复制打印的字符串写死在代码里能成功,是因为写死时传入的是字典对象,不是字符串。
修复方案
仅需新增一步,将读取到的JSON字符串通过json.loads()转为Python字典后再传入请求即可,修复后的代码如下:
import requests import csv import json filename = 'file.csv' # 注意:如果url中[id]是要替换为请求体里的post值,后续可以自行做占位符替换 url = "https://gorest.co.in/public/v1/posts/[id]/comments" headers = { "Content-Type": "application/json", "Authorization": "Bearer tricked ya" } with open(filename, encoding='utf-8') as cF: reader = csv.reader(cF) for idx,row in enumerate(reader): for col in row: # 跳过空单元格 if not col.strip(): continue print("Body: ", col) # 核心修复:将JSON字符串转为字典 # 如果CSV导出的内容带多余的首尾单引号,可以先加一步col = col.strip("'") req_body = json.loads(col) r = requests.request("POST", url, headers = headers, json = req_body) print("Status: ", r.status_code) print("Status: ", r.reason) print("Text response: ", r.text) print("\nTest number: ",idx,"\n")
注意:如果执行
json.loads时报格式错误,检查Google Sheets导出CSV时的转义规则,确保单元格内的JSON字符串里的双引号被正确转义,没有多余的包裹符号。
可选优化
如果url中的[id]是要替换为每个请求体里post字段的数值,可以在转成字典后新增一行替换逻辑:
req_body = json.loads(col) # 替换url占位符 current_url = url.replace("[id]", str(req_body["post"])) r = requests.request("POST", current_url, headers = headers, json = req_body)
内容的提问来源于stack exchange,提问作者khvc
相关产品推荐
相关产品推荐

