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

含特殊字符的JSON字符串转JSONObject解决方案咨询

修复过度转义的JSON字符串并转换为JSONObject

问题描述

你有一段被多次嵌套转义的JSON字符串,尝试用replace方法处理后仍残留异常,无法转换为合法的JSONObject。

原始异常字符串代码:

String text="\"\"\\\"{\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"createdAt\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"2023-10-31T11:43:29\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"updatedAt\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"2023-10-31T11:43:30\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"createdBy\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\":null,\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"updatedBy\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\":null,\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"isDeleted\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\":false,\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"messageValue\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"name\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"hello world\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"status\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"CREATED\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"priority\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\":1\\\\\\\\\\\\\\\\n}\\\\\\\\\\\\\\\n}\"\"";

你尝试过的无效代码:

text.replace("\\","").replace("\\n","UUU").replace("\\n","TTT").replace("\"\\"\\"\\"\\"{","\"{")

解决方案

这段字符串的核心问题是多层嵌套转义,加上首尾存在冗余的引号和转义字符。需要按以下步骤处理:

步骤1:提取核心转义内容

先去掉首尾的冗余字符:原始字符串开头是""\",结尾是\""",直接截取中间的有效部分:

String coreText = text.substring(3, text.length() - 3);

步骤2:还原转义字符

由于字符串被多次转义,比如\\\\对应实际的\\,\\\\n对应\n,需要把这些转义还原。推荐用成熟工具类避免手动出错:

  • 用Apache Commons Lang的StringEscapeUtils.unescapeJava()一键反转义:
import org.apache.commons.lang3.StringEscapeUtils;

String unescapedText = StringEscapeUtils.unescapeJava(coreText);
  • 如果不想引入第三方库,也可以手动分层替换:
String unescapedText = coreText.replace("\\\\", "\\")
                               .replace("\\n", "\n");

步骤3:转换为JSONObject

用Jackson或Gson等JSON库将处理后的字符串转换为JSONObject:

import org.json.JSONObject;

try {
    JSONObject jsonObject = new JSONObject(unescapedText);
    // 格式化输出验证结果
    System.out.println("合法JSON:" + jsonObject.toString(2));
} catch (Exception e) {
    e.printStackTrace();
}

为什么之前的方法无效

你之前的replace("\\","")会直接删除所有转义符,导致原本用来转义引号的\"变成",破坏JSON的引号结构;同时替换顺序混乱,没有处理多层转义的逻辑,所以无法得到合法的JSON格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:54:50