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

修复REST API返回的无效JSON并替换字段内引号的解决方案咨询

修复REST API返回的无效JSON并替换字段内引号的解决方案咨询

嘿,我之前也碰到过这种API返回半吊子JSON的糟心事!直接用解析库报错,全局替换又容易误伤其他字段,给你几个针对性的解决思路,都是实际踩坑后验证过的:


一、精准正则替换(快速解决,适合结构固定的场景)

既然问题只出在Name字段的取值里,我们可以写个只瞄准该字段内部双引号的正则,完全不会碰其他字段(比如你提到的空值Address)。

看你用到了String.replaceAll(),应该是Java环境吧?给你个代码示例:

String invalidJson = "{\"results\" : { \"Name\" : \"xxxx, \"yyyy\"\", \"Role\" : \"developer\", \"Address\" : \"\" }}";
// 仅替换Name字段值内部的双引号为单引号
String fixedJson = invalidJson.replaceAll("(?<=\"Name\" : \".*)\"(?=.*?(?=\"(,|})))", "'");
// 现在fixedJson就是标准有效JSON了,能正常用解析库处理

这个正则的逻辑很清晰:

  • (?<=\"Name\" : \".*) 是反向预查,确保我们要替换的双引号在Name字段的取值范围内
  • (?=.*?(?=\"(,|}))) 是正向预查,保证这个双引号是字段内部的内容,不是字段结束的闭合引号
  • 只把这些精准匹配到的双引号换成单引号,其他字段的内容完全不受影响

二、逐字符遍历处理(更稳妥,适合复杂边界场景)

如果API返回的JSON偶尔还有其他小问题,或者你担心正则有漏网的边界情况,可以手动遍历字符串,标记是否进入了Name字段的取值区域,只在这个区域内替换引号:

String invalidJson = "{\"results\" : { \"Name\" : \"xxxx, \"yyyy\"\", \"Role\" : \"developer\", \"Address\" : \"\" }}";
StringBuilder sb = new StringBuilder();
boolean isInNameValue = false;
boolean isInQuotes = false;

for (char c : invalidJson.toCharArray()) {
    // 仅在Name字段的取值引号内,把双引号替换成单引号
    if (isInNameValue && isInQuotes && c == '"') {
        sb.append('\'');
        continue;
    }
    sb.append(c);

    // 检测是否进入Name字段的取值起始位置
    if (sb.length() >= 10 && sb.substring(sb.length() - 10).equals("\"Name\" : \"")) {
        isInNameValue = true;
        isInQuotes = true;
    }
    // 检测是否离开Name字段的取值区域
    if (isInNameValue && c == '"') {
        int prevIndex = sb.length() - 2;
        if (prevIndex >= 0 && (sb.charAt(prevIndex) == ',' || sb.charAt(prevIndex) == '}')) {
            isInNameValue = false;
            isInQuotes = false;
        }
    }
}

String fixedJson = sb.toString();
// 现在可以放心用Jackson、Gson这类库解析这个JSON了

最后给个小提醒

上面的方法都是客户端的临时补救方案,最靠谱的还是联系API开发者修复输出的JSON——规范的JSON应该把内部引号转义成\",从源头解决问题才是长久之计。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 10:18:02