Python如何通过re.sub()在指定字符前插入反斜杠解决JSON转义问题
问题核心原因
你遇到的问题来自两个认知误区,和代码逻辑、json.loads本身的bug没有关系:
- 误区1:Python交互式环境直接输出变量时,展示的是字符串的
repr格式化结果,会自动将字符串内的单个反斜杠显示为两个反斜杠,不代表字符串实际存储了两个反斜杠。你之前正则替换得到的'abc\\[def',实际存储内容就是abc\[def,和print输出的结果一致,这部分正则没有多插入反斜杠。 - 误区2(最关键):你对JSON的合法转义规则理解错误。在JSON的字符串值内部,
{、[、]、}、,这些字符本身就是合法字符,完全不需要加反斜杠转义。JSON规范仅要求对以下字符做转义:- 字符串边界符双引号
" - 转义符本身反斜杠
\ - 换行、回车、制表符、退格这类不可见控制字符
你手动给方括号、大括号前加反斜杠,反而生成了JSON不识别的无效转义序列——\[、\{这类组合不在JSON规定的合法转义范围内,所以json.loads会直接抛出转义错误,和反斜杠数量没有关系。
- 字符串边界符双引号
正确实现方案
绝对不要手写正则处理JSON转义,边界场景极多很容易出问题,直接用Python标准库json模块的内置方法即可,模块会自动处理所有需要转义的字符,不需要手动干预:
import json # 待组装的字段值,哪怕包含{[]}",等任意特殊字符都可以直接传入 text2 = '内容包含{ [ ] } , " 各种你之前以为非法的字符' target_data = {"text1": text2} # 自动生成完全合法的JSON字符串,所有需要转义的字符会被自动处理 valid_json_str = json.dumps(target_data, ensure_ascii=False) # 解析验证,不会抛出任何错误 parsed_data = json.loads(valid_json_str) print(valid_json_str) print(parsed_data)
如果你是拿到了别人拼接好的、带错误转义的半成品字符串,先把你之前手动加的无效反斜杠清理掉,再通过标准库重新序列化即可,不要继续在错误的正则转义逻辑上调整。
验证小技巧:可以直接执行
print(json.dumps({"test":"a[b{c}d]e,f"})),你会看到输出的JSON字符串里括号、逗号前面都没有反斜杠,直接可以正常解析。
内容的提问来源于stack exchange,提问作者Bigga
相关产品推荐
相关产品推荐

