You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:06:03