Java 15 的文本块显著简化 JSON 字符串书写,自动处理换行缩进、免双重转义双引号与反斜杠,兼容 Jackson/Gson 解析,但需注意尾逗号和不可见字符风险。

Java 15 引入的字符串文本块(Text Blocks)能显著简化 JSON 字符串的书写,尤其在处理多行、带引号和反斜杠的 JSON 内容时,避免了传统字符串中大量手动转义的繁琐操作。
JSON 多行结构无需手动换行符和拼接
传统方式需用 + 拼接或嵌入 ,易出错且可读性差。文本块自动保留缩进和换行,JSON 格式天然对齐:
// ✅ 文本块:清晰直观
String json = """
{
"name": "Alice",
"age": 30,
"hobbies": ["reading", "coding"]
}
""";
注意:首尾换行和缩进会被自动修剪(通过 stripIndent() 规则),实际内容与视觉对齐一致,无需额外处理。
双引号和反斜杠不再需要双重转义
JSON 中大量使用双引号 " 和反斜杠 (如 "、\)。文本块内这些字符直接写即可,JVM 不做提前转义:
立即学习“Java免费学习笔记(深入)”;
OpenJDK 24 Windows x64 官方参考实现(24+36),适合 Windows 环境进行 Java 开发、编译、运行和版本兼容性验证。
- 普通字符串:
"{ "name": "John", "path": "C:\\Users\\file.json" }"—— 需四层反斜杠、三重引号转义 - 文本块:
"""{ "name": "John", "path": "C:\Users\file.json" }"""—— 只需单层反斜杠和原样双引号
特别适合含正则、文件路径、URL 或嵌套 JSON 的场景,大幅降低语法错误风险。
与 JSON 解析库(如 Jackson/Gson)无缝配合
文本块生成的字符串是标准 String,可直接传给 ObjectMapper.readValue() 或 Gson.fromJson():
ObjectMapper mapper = new ObjectMapper(); Person p = mapper.readValue(json, Person.class); // json 来自文本块,完全兼容
无需调用 stripIndent() 或 replaceAll() —— 只要 JSON 本身格式正确(缩进不影响解析),解析器会忽略空白并准确识别结构。
注意事项:空格与结尾逗号的隐含风险
文本块保留内部所有空白,但 JSON 对空白不敏感;真正需警惕的是人为引入的非法字符:
- 末尾多出的逗号(如数组最后一项后加 ,)—— JSON 标准不支持,Jackson 默认报错(可配置 ALLOW_TRAILING_COMMA)
- 行首无意混入不可见全角空格或 BOM —— 导致解析失败,建议编辑器启用“显示不可见字符”
- 若 JSON 需动态插入变量,文本块不支持插值,应改用 String.format() 或构建器(如 JsonNode)
静态 JSON 模板首选文本块;动态内容建议组合使用文本块 + String.replace() 或专用序列化工具。

















