使用Python正则为无引号类JSON字符串补引号适配json.loads
使用Python re模块修复无引号类JSON字符串
核心思路
通过正则表达式匹配类JSON字符串中的键和值,分别为它们包裹单引号(或双引号,方便后续用json.loads解析)。
代码实现(基础版)
针对扁平结构的类JSON字符串,可直接用以下正则替换:
import re # 原始无引号类JSON字符串 raw_str = '{emailCallBackUrl:https://yyyy-xx.zzzzz, userName:john_doe, age:30}' # 给键和值添加单引号 formatted_str = re.sub(r'(\w[\w-]*):([^\s,}]+)', r"'\1':'\2'", raw_str) print(formatted_str) # 输出:{'emailCallBackUrl':'https://yyyy-xx.zzzzz', 'userName':'john_doe', 'age':'30'}
正则规则解释
(\w[\w-]*):匹配键名,允许字母、数字、下划线开头,后续可跟连字符(适配类似emailCallBackUrl的命名)。::匹配键值之间的分隔冒号。([^\s,}]+):匹配值,匹配非空格、非逗号、非右大括号的连续字符,覆盖URL、普通字符串、数字等常见场景。- 替换模板
r"'\1':'\2'":用单引号包裹捕获到的键(\1)和值(\2)。
适配json.loads的版本
如果需要直接转为JSON对象,建议替换成双引号(JSON规范要求双引号):
import json # 替换成双引号 formatted_json_str = re.sub(r'(\w[\w-]*):([^\s,}]+)', r'"\1":"\2"', raw_str) # 解析为JSON对象 data = json.loads(formatted_json_str) print(data['emailCallBackUrl']) # 输出:https://yyyy-xx.zzzzz
注意事项
- 上述正则仅适用于无嵌套、值不含空格/逗号/大括号的简单场景。如果你的字符串有嵌套结构或复杂值(比如带空格的字符串),需要调整正则逻辑,例如通过递归匹配或更精确的边界判断处理。
- 若值包含特殊字符(如冒号),需针对性修改正则的匹配规则,避免误匹配。
内容的提问来源于stack exchange,提问作者Amit
相关产品推荐
相关产品推荐

