JSON转义字符处理详解(fastjson场景)
一、JSON中的转义字符
在JSON中,以下字符需要进行转义处理:
\" 双引号
\\ 反斜杠
\/ 正斜杠
\b 退格符
\f 换页符
\n 换行符
\r 回车符
\t 制表符
\uXXXX Unicode字符
二、fastjson中的转义处理
1. 自动转义
fastjson在将Java对象转换为JSON字符串时,会自动处理转义字符:
import com.alibaba.fastjson.JSON;
public class Main {
public static void main(String[] args) {
String text = "Hello\nWorld\"";
String json = JSON.toJSONString(text);
System.out.println(json); // 输出: "Hello\nWorld\""
}
}
2. 手动转义
如果需要手动处理转义字符,可以使用JSON.toJSONString
的第二个参数:
String text = "特殊字符: \b \f \n \r \t \" \\ /";
String json = JSON.toJSONString(text, SerializerFeature.UseSingleQuotes);
System.out.println(json);
3. 反序列化时的转义处理
fastjson在解析JSON字符串时,会自动将转义字符转换回原始字符:
String jsonStr = "\"Hello\\nWorld\\\"\"";
String text = JSON.parseObject(jsonStr, String.class);
System.out.println(text); // 输出: Hello
// World"
三、特殊场景处理
1. 处理Unicode字符
String unicodeStr = "中文\\u4E2D\\u6587";
String json = JSON.toJSONString(unicodeStr);
System.out.println(json); // 输出: "中文\\u4E2D\\u6587"
// 解析时自动转换
String parsed = JSON.parseObject(json, String.class);
System.out.println(parsed); // 输出: 中文\u4E2D\u6587
2. 禁用转义
使用SerializerFeature.DisableEscape
可以禁用转义:
String text = "Hello\nWorld";
String json = JSON.toJSONString(text, SerializerFeature.DisableEscape);
System.out.println(json); // 输出: "Hello
// World"
四、常见问题解决方案
1. 处理HTML标签
String html = "<div>content</div>";
String json = JSON.toJSONString(html);
// 输出: "<div>content<\/div>"
2. 处理特殊符号
String special = "&<>";
String json = JSON.toJSONString(special);
// 输出: "&<>"
3. 处理换行符
String multiLine = "行\n第二行";
String json = JSON.toJSONString(multiLine);
// 输出: "行\n第二行"
五、实践
- 对于用户输入的内容,始终使用fastjson进行序列化和反序列化
- 不要手动拼接JSON字符串
- 在处理HTML或XML内容时,考虑先进行编码处理
- 在需要保留原始格式时,使用
SerializerFeature.DisableEscape
通过合理使用fastjson的转义处理功能,可以确保JSON数据的正确性和安全性。
(牛站网络)