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

Python字符串化字典列表内外引号互换 接口POST请求Body构造问题

问题原因及解决方案

1. replace不生效的根因

Python中字符串是不可变对象,str.replace()方法不会修改原字符串,只会返回替换后的新字符串。你在代码中仅执行了body.replace("'", '"'),没有将返回结果重新赋值给body变量,相当于替换操作的结果被直接丢弃,原字符串没有任何变化。你在Python Shell中测试时能看到正确结果,是因为Shell会自动打印方法的返回值,并不是原变量被修改了。

2. 字典列表转请求body的正确方式

你不需要用str()转换后手动替换引号,直接使用json.dumps()处理字典列表即可,它生成的标准JSON字符串天然符合「内部所有字符串用双引号」的要求,完全适配POST请求的body格式要求。如果确实需要在整个字符串外层包裹单引号,直接对json.dumps()的输出做拼接即可。

修正后的代码

import json

def insert_header(self, request):
    pid = request.meta['pid']
    pa = request.meta['pa']
    url = request.url
    pid = [x.split('ern:product::')[-1] for x in pid]

    body = [
        {"id":"1234567","variables":{"id":"ern:product::pid"}},
        {"id":"1234567","variables":{"id":"ern:product::pid"}},
        {"id":"1234567","variables":{"id":"ern:product::pid"}}
    ]
    
    if len(pid) == len(body):
        for counter, i in enumerate(body):
            i["variables"] = {"id":"ern:product::" + pid[counter]}

    # 直接生成标准JSON格式body,内部自动为双引号
    body = json.dumps(body)
    # 如果确实需要外层加单引号,打开下面这行注释即可
    # body = f"'{body}'"

    return Request(url, method='POST', meta=request.meta, body=body, callback=self.check_header, **self.parse_page_kwargs)

额外说明

如果你之前用json.dumps()没有得到预期结果,大概率是用法错误,没有把生成的结果赋值给body变量,和之前replace不生效的原因一致。

内容的提问来源于stack exchange,提问作者Brian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:54:03