服务公告
蓝易云cdn:jackson实现json缩进美化输出
发布时间:2026-02-14 00:19
Jackson 实现 JSON 缩进美化输出(Pretty Print)🧠
在 Java 项目中,默认情况下 Jackson 输出的 JSON 是压缩格式(无换行、无缩进),适合传输但不利于调试。
如果用于日志输出、调试接口、配置文件导出,就需要开启格式化输出(Pretty Print)。
下面给出严谨、可直接落地的实现方式。
一、最简单方式(推荐)🚀
使用 ObjectMapper 自带的缩进功能:
import com.fasterxml.jackson.databind.ObjectMapper;
ObjectMapper mapper = new ObjectMapper();
String json = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(obj);
System.out.println(json);
原理说明
writerWithDefaultPrettyPrinter()
创建一个带默认缩进规则的 Writer。- 默认规则:
- 2 空格缩进
- 自动换行
- 数组和对象结构清晰分层
这是官方推荐方式,简单稳定,适用于大多数场景。
二、全局开启缩进(适合统一配置)⚙️
如果是 Spring Boot 或全局 JSON 输出场景,可以这样设置:
import com.fasterxml.jackson.databind.SerializationFeature;
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
String json = mapper.writeValueAsString(obj);
原理说明
INDENT_OUTPUT是序列化特性开关- 启用后,所有 JSON 输出默认带格式化
- 适合日志系统或开发环境调试
注意:生产环境高并发接口通常不建议开启(会增加体积和少量性能消耗)。
三、自定义缩进规则(进阶)💡
如果你希望:
- 改成 4 空格缩进
- 或使用制表符
- 或自定义数组换行规则
可以使用 DefaultPrettyPrinter:
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
import com.fasterxml.jackson.databind.ObjectMapper;
ObjectMapper mapper = new ObjectMapper();
DefaultPrettyPrinter printer = new DefaultPrettyPrinter();
printer.indentArraysWith(DefaultPrettyPrinter.FixedSpaceIndenter.instance);
String json = mapper.writer(printer)
.writeValueAsString(obj);
如果要改为 4 空格缩进:
printer.indentObjectsWith(
new DefaultPrettyPrinter.NopIndenter()
);
更复杂场景可以继承 DefaultPrettyPrinter 自定义格式策略。
四、字符串 JSON 的美化方式 🔍
如果你已经有一个压缩 JSON 字符串,需要美化:
String compactJson = "{\"name\":\"test\",\"age\":18}";
ObjectMapper mapper = new ObjectMapper();
Object jsonObj = mapper.readValue(compactJson, Object.class);
String prettyJson = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(jsonObj);
System.out.println(prettyJson);
逻辑流程
- 先解析字符串为对象
- 再重新序列化为带缩进格式
这是标准转换流程。
五、性能与实践建议 📊
| 场景 | 是否建议开启缩进 |
|---|---|
| 接口对外返回 | ❌ 不建议 |
| 内部调试 | ✅ 建议 |
| 日志记录 | 视情况而定 |
| 配置导出 | ✅ 建议 |
原因:
- 格式化会增加 JSON 字符串长度
- 高 QPS 系统中可能增加带宽成本
- 但可读性显著提升
六、总结 🎯
实现 JSON 缩进美化,本质是开启 PrettyPrinter。
最推荐写法:
mapper.writerWithDefaultPrettyPrinter()
全局方式:
mapper.enable(SerializationFeature.INDENT_OUTPUT);
调试阶段开启,生产环境按需控制,这是工程上最稳妥的策略。
掌握这个细节,日志分析和接口排错效率会明显提升。📈
已经是第一篇啦!
下一篇: 服务器路由命令有哪些常用技巧?