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

使用正则替换Python字典元素时出现JSONDecodeError错误排查

问题原因分析

你的代码存在两个核心问题,直接导致JSON解析失败:

1. 替换后的字符串未符合JSON语法要求

JSON规范中,字符串必须用双引号包裹,但你的正则替换直接把数字换成了Ar、Ta这类裸字符串。比如原JSON里的[0, 3]会被替换成[Ar, Ca],这在JSON解析器看来是非法的——Ar会被当作未定义的标识符,而非合法的字符串值,这就是触发JSONDecodeError的直接原因。

2. 数字匹配顺序错误,多位数被拆分破坏

你的循环默认按int_mapping的key升序遍历(0,1,2,...10,11)。当先处理1时,会把10中的1替换成Ta,变成Ta0;之后处理0时又把Ta0里的0替换成Ar,最终得到TaAr,完全破坏了原本10对应Aq的映射逻辑。

修正后的代码示例

如果要保留JSON+正则的思路,只需调整两点:

  • 替换时给映射值加上双引号,符合JSON字符串格式
  • 先替换多位数,再替换一位数,避免多位数被拆分
import re 
from json import loads, dumps

movable = {"movable": [0, 3, 6, 9], "fixed": [1, 4, 7, 10], "mixed": [2, 5, 8, 11]}
int_mapping = {0: "Ar", 1: "Ta", 2: "Ge", 3: "Ca", 4: "Le", 5: "Vi", 6: "Li", 7: "Sc", 8: "Sa", 9: "Ca", 10: "Aq", 11: "Pi"}

movable_str = dumps(movable)
# 按数字字符串长度从长到短排序,优先替换多位数
for key in sorted(int_mapping.keys(), key=lambda x: len(str(x)), reverse=True):
    # 替换时给映射值包裹双引号,同时确保匹配独立数字
    movable_str = re.sub(rf'(?<![0-9]){key}(?![0-9])', f'"{int_mapping[key]}"', movable_str)
    
movable = loads(movable_str)
print(movable)

运行后会得到正确结果:

{'movable': ['Ar', 'Ca', 'Li', 'Ca'], 'fixed': ['Ta', 'Le', 'Sc', 'Aq'], 'mixed': ['Ge', 'Vi', 'Sa', 'Pi']}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 03:00:59