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

含单引号类JSON字符串转列表对象的通用解决方案求助

解决方案

要处理这种含未转义单引号的类JSON字符串,核心是先修复字符串中的语法错误(转义字符串内部的单引号),再用ast.literal_eval解析——它支持单引号包裹的字典/列表结构,比json模块更灵活。

步骤1:实现通用解析函数

用正则匹配所有被单引号包裹的字符串内容,转义内容内部的单引号,避免破坏字典结构:

import re
import ast

def parse_quoted_string(s):
    # 转义单引号包裹内容里的内部单引号
    def escape_inner_quotes(match):
        content = match.group(1)
        return f"'{content.replace(\"'\", \"\\\\'\")}'"
    
    # 修复字符串语法
    fixed_str = re.sub(r"'(.*?)'", escape_inner_quotes, s, flags=re.DOTALL)
    # 安全解析为Python对象
    return ast.literal_eval(fixed_str)

步骤2:测试使用

把目标字符串传入函数即可:

original_str = "[{'long_name': 'Sample's Road', 'short_name': 'Sample's Rd', 'types': ['route']}, {'long_name': 'England', 'short_name': 'England', 'types': ['boo', 'far']}]"
result = parse_quoted_string(original_str)
print(result)
# 输出:
# [{'long_name': "Sample's Road", 'short_name': "Sample's Rd", 'types': ['route']}, {'long_name': 'England', 'short_name': 'England', 'types': ['boo', 'far']}]

通用性说明

  • 兼容有无单引号的场景:没有未转义单引号时,正则替换不会修改原内容;
  • 适配任意键值对数量、嵌套结构(比如示例中的列表嵌套),只要是类Python字典/列表的单引号包裹结构;
  • ast.literal_eval是安全解析,避免了eval的代码注入风险。

为什么之前的方法失效?

  • json.loads:强制要求键和值用双引号包裹,不支持单引号结构,且对引号转义要求严格;
  • ast.literal_eval:原字符串未转义的单引号会导致字符串提前结束,触发语法错误;
  • split()/strip():只能处理简单字符串分割,无法应对嵌套的字典/列表结构,极易破坏数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:45:55