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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:45:31