在字符串化列表中将内部单引号切换为双引号,将外部双引号切换为单引号

Switching inner single quotes to double quotes and outer double quotes to single quotes in stringified list

我有一个字典列表,正在用另一个列表中的数据动态填充。这个字典列表然后被用作请求中的正文参数。字典列表必须是字符串才能请求成功。

问题是,当我动态填充字典列表 str(list_of_dicts) 时,它会在字符串对象周围加上双引号,并在其中的所有内容周围加上单引号。我需要它恰恰相反,用双引号包裹字符串,用单引号包裹里面的所有东西。

我已经尝试过 replace、str、repr、join 和 json.dumps 到目前为止都无济于事。

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]}

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

真正令人沮丧的是,在 python shell 中,我可以复制失败的词典列表(引号错误的列表)并执行:list_of_dicts.replace( "'", '"') 并且它 returns 正是我所需要的,当我 运行 代码时它并没有像那样改变。 预先感谢您提出任何建议。

我认为你应该删除行 body = body[1:-1]

str(body) 不在开头和结尾放置任何引号。 所以你正在删除部分实际数据。

您也可以使用body = json.dumps(body),无需再更换。

要查看 str 的实际内容,请使用 print(body)。它应该看起来像:

[{"id": "1234567", "variables": {"id": "ern:product::pid"}}, {"id": "1234567", "variables": {"id": "ern:product::pid"}}, {"id": "1234567", "variables": {"id": "ern:product::pid"}}]