服务公告

服务公告 > Linux命令 > 蓝易云cdn:jackson实现json缩进美化输出

蓝易云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);

逻辑流程

  1. 先解析字符串为对象
  2. 再重新序列化为带缩进格式

这是标准转换流程。


五、性能与实践建议 📊

场景 是否建议开启缩进
接口对外返回 ❌ 不建议
内部调试 ✅ 建议
日志记录 视情况而定
配置导出 ✅ 建议

原因:

  • 格式化会增加 JSON 字符串长度
  • 高 QPS 系统中可能增加带宽成本
  • 但可读性显著提升

六、总结 🎯

实现 JSON 缩进美化,本质是开启 PrettyPrinter

最推荐写法:

mapper.writerWithDefaultPrettyPrinter()

全局方式:

mapper.enable(SerializationFeature.INDENT_OUTPUT);

调试阶段开启,生产环境按需控制,这是工程上最稳妥的策略。

掌握这个细节,日志分析和接口排错效率会明显提升。📈

已经是第一篇啦!

下一篇: 服务器路由命令有哪些常用技巧?