如何将单引号字符串字典转为双引号格式以解析为字典类型
单引号字典字符串转双引号的几种方法
方法1:直接全局替换(仅适用于无特殊字符的简单场景)
如果你的字典字符串没有嵌套结构,也没有值包含单引号的情况,直接把所有单引号换成双引号就行:
original_str = "{'first_name': 'John', 'age': 89}" target_str = original_str.replace("'", '"') print(target_str) # 输出: {"first_name": "John", "age": 89}
这种方法最省事,但如果遇到像{'desc': "I'm a student"}这种带单引号的值,替换后会出现格式错误,只适合简单场景。
方法2:用ast模块解析(推荐,安全可靠)
不用手动替换引号,直接用Python的ast模块把字符串解析成真实字典,再转成双引号格式的JSON字符串,能处理嵌套字典、值含单引号等复杂情况:
import ast import json original_str = "{'first_name': 'John', 'age': 89}" # 解析为字典对象 dict_obj = ast.literal_eval(original_str) # 转成双引号格式的字符串 target_str = json.dumps(dict_obj) print(target_str) # 输出: {"first_name": "John", "age": 89}
ast.literal_eval比eval安全,不会执行恶意代码,是处理Python格式字符串的首选方式。
方法3:正则表达式精准替换
如果一定要用正则,可以只匹配字典键和字符串值的单引号,避免误替换:
import re original_str = "{'first_name': 'John', 'age': 89}" # 匹配键名或字符串值的单引号,替换为双引号 target_str = re.sub(r"'([\w]+)'", r'"\1"', original_str) print(target_str) # 输出: {"first_name": "John", "age": 89}
如果值里包含空格或特殊字符,可把正则调整为r"'([^']+)'",能匹配任意非单引号的内容,适配更复杂的字符串值。
内容的提问来源于stack exchange,提问作者Eyang Daniel
相关产品推荐
相关产品推荐

