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

Python中如何将多层双引号转义的字符串转换为合法dict

问题根源定位

你之前转换失败的核心原因是手中的字符串既不符合标准JSON格式,也不符合Python字面量语法,存在两层结构问题:

  • 最外层多了一层单引号包裹,让完整的JSON内容变成了字符串值本身
  • 内部的双引号采用了CSV格式的转义规则:用*连续两个双引号""*代表字符串边界,而非JSON/Python字面量使用的单双引号边界、反斜杠转义规则
    这就是为什么直接调用ast.literal_eval会解析出{Source:Test Flow Action}这种非法结构:Python解析器遇到连续两个双引号会识别为空字符串字面量,中间的Source会被当成无引号的变量标识符,最终拼接成不符合字典语法的结构;而json.loads会因为连续双引号不符合JSON格式要求直接抛出解析错误。
具体通用解决步骤

分三步即可完成格式转换,适配你当前的测试场景:

  1. 先用ast.literal_eval剥掉最外层的单引号包裹,拿到内部的原始内容串
  2. 将内部连续的双引号替换为JSON标准的双引号边界,生成合法JSON字符串
  3. 用json.loads将标准JSON串转换为合法Python字典

对应可直接运行的代码示例:

import ast
import json

# 原始待转换字符串
d = '"{""Source"":""Test Flow Action""}"'

# 第一步:剥离最外层单引号包裹
inner_content = ast.literal_eval(d)
# 此时inner_content的实际值为:{""Source"":""Test Flow Action""}

# 第二步:替换连续双引号为JSON标准格式
standard_json_str = inner_content.replace('""', '"')
# 替换后字符串为合法JSON结构:{"Source":"Test Flow Action"}

# 第三步:转换为Python字典
result = json.loads(standard_json_str)
# 最终输出result: {'Source': 'Test Flow Action'}
复杂场景适配

如果后续遇到字符串值内部本身包含双引号的情况(比如字典值为他说"今天天气很好"),直接用字符串替换容易出现转义错位,此时可以借助Python内置的csv模块处理双引号转义逻辑,替换上面第二步的实现即可:

import csv
from io import StringIO

# 替换第二步的双引号替换逻辑,适配内部带双引号的场景
reader = csv.reader(StringIO(inner_content), quotechar='"', doublequote=True)
standard_json_str = next(reader)[0]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 23:15:04