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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:25:01