使用Python re.sub正则移除包裹数字的双引号以解析JSON
解决JSON中数字被双引号包裹的解析问题
我之前也踩过这种接口返回格式不规范的坑——明明是数字类型,却被多余的双引号包起来,直接用json.loads()解析肯定报错。试了好几种正则都没搞定,后来用S. Kablar的方案解决了,给你具体的实现思路:
核心代码实现
import re import json # 接口返回的格式错误JSON示例 malformed_json = '{"user_id": "1001", "age": "28", "balance": "199.99", "score": "1200"}' # 替换包裹纯数字(含小数)的双引号 corrected_json = re.sub(r'"(\d+\.?\d*)"', r'\1', malformed_json) # 现在可以正常解析为JSON对象 parsed_data = json.loads(corrected_json) print(parsed_data) # 输出结果: {'user_id': 1001, 'age': 28, 'balance': 199.99, 'score': 1200}
正则表达式说明
"(\d+\.?\d*)":匹配被双引号包裹的纯数字内容\d+:匹配至少1位整数部分\.?:匹配可选的小数点(?表示该元素出现0次或1次)\d*:匹配小数点后可选的数字(*表示0次或多次)
- 替换部分的
\1:引用正则中捕获组(括号里的内容),也就是把双引号去掉,只保留数字本身
扩展适配场景
如果接口返回的数字包含科学计数法(比如"1.2e3"),可以把正则调整为:
corrected_json = re.sub(r'"(\d+\.?\d*([eE][+-]?\d+)?)"', r'\1', malformed_json)
这个版本会匹配整数、小数和科学计数法格式的数字,避免遗漏特殊情况。
内容的提问来源于stack exchange,提问作者Álvaro Mondéjar
相关产品推荐
相关产品推荐

