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

如何正确反转义含内部转义字符的JSON字符串?

如何保留JSON字符串内部的转义字符?

现有一段带转义的JSON字符串:

{"id":"1","name":"cat with \"Bob\" name"}

需求是正确处理后保留文本内部的转义,最终得到的有效JSON需和原字符串格式一致:

{"id":"1","name":"cat with \"Bob\" name"}

试过的无效方法

我用了两种Java方式处理,但都会把所有转义全部移除,生成无效JSON:

// 方法1:用JSONObject解析
JSONObject jsonObject = new JSONObject(jsonStringEscaped);
// 方法2:用StringEscapeUtils反转义
StringEscapeUtils.unescapeJava(jsonStringEscaped)

处理后得到的无效JSON:

{"id":"1","name":"cat with "Bob" name"}

解决办法

方法1:基于JSON解析+字段重转义

先解析JSON结构拿到字段值,再对字段值单独转义后重新构造JSON:

// 1. 解析原始JSON,拿到未转义的字段值
JSONObject jsonObject = new JSONObject(jsonStringEscaped);
String nameValue = jsonObject.getString("name"); // 此时值为 "cat with "Bob" name"

// 2. 对字段值里的双引号重新转义
String escapedName = nameValue.replace("\"", "\\\"");
jsonObject.put("name", escapedName);

// 3. 输出符合要求的JSON字符串
String validJson = jsonObject.toString();

方法2:用Jackson等专业JSON库处理

专业JSON库会自动区分JSON结构转义和内容转义,默认就能正确输出:

ObjectMapper mapper = new ObjectMapper();
// 解析原始JSON
JsonNode node = mapper.readTree(jsonStringEscaped);
// 序列化输出,自动保留正确的转义格式
String validJson = mapper.writeValueAsString(node);

原理说明

问题出在混淆了Java字符串转义和JSON格式转义:你拿到的原始字符串是Java层面的表示,其中的\"是Java用来指代JSON里的";直接全局反转义会把Java转义去掉,导致JSON结构里的双引号失去转义,破坏格式。正确的做法是让JSON库处理结构解析,再按需对内容做转义后重新序列化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:37:11