电话
400 9058 355
Gson需用GsonBuilder().setPrettyPrinting()启用格式化输出,Jackson需enable(SerializationFeature.INDENT_OUTPUT),org.json可用JSONObject.toString(indentFactor);三者均仅用于调试,不可用于生产响应或存储。
GsonBuilder 启用格式化输出
默认 Gson 的 toJson() 返回的是紧凑(minified)JSON 字符串,没有换行和缩进。要美化打印,必须显式构建带格式化选项的 Gson 实例。
关键点是调用 setPrettyPrinting(),它会启用缩进(2 空格)、换行和键排序(按字典序)。注意:该设置只影响序列化(toJson),不影响反序列化。
Gson gson = new GsonBuilder().setPrettyPrinting().create();Map、List、自定义 POJO 都生效setPrettyPrinting() 不会阻止 StackOverflowError,仍需配合 disableHtmlEscaping() 或自定义 TypeAdapter
ObjectMapper 启用缩进输出Jackson 默认也不格式化。需要配置 SerializationFeature.INDENT_OUTPUT 为 true,这是最直接的方式。
与 Gson 不同,Jackson 的缩进是可配置的:默认用 2 空格,但可通过 DefaultIndenter 替换为制表符或自定义空格数。
ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);mapper.setDefaultPrettyPrinter(new DefaultPrettyPrinter().indentObjectsWith(new DefaultIndenter(" ", "\n")));
INDENT_OUTPUT 对 null 值、空集合、时间类型等保持原语义,不会额外添加字段configure(JsonGenerator.Feature.ESCAPE_NON_ASCII, true) 避免终端乱码org.json 的 JSONObject.toString(indentFactor)
如果项目已引入 org.json(比如 Android 或轻量服务),它自带美化能力,无需额外引入 Gson/Jackson。
toString(int) 参数是每级缩进的空格数,传 2 或 4 最常用;传 0 则退化为紧凑格式。
new JSONObject(jsonString).toString(2) —— 直接美化已有字符串(前提是合法 JSON)JSONException,所以务必 try-catch,尤其当输入不可信时美化后的 JSON 含 \n 和空格,在 SLF4J / Log4j 等日志框架中可能被截断、折叠,或在 Kibana 等 UI 里显示为单行(因 HTML 渲染忽略空白)。
根本原因不是 JSON 本身错,而是日志输出链路未保留空白。解决思路分两层:

layout 的 pattern 包含换行符支持(如 Logback 的 %replace(%msg){'\n', '\n'} 不够,要用 %replace(%msg){'\n', '
'} 配合 HTML layout)System.out.println() 或 IDE 控制台直接看;上生产环境应关闭美化,仅在 log.debug() 且 isDebugEnabled() 为 true 时才调用美化方法@ToString 打印含 JSON 字段的对象,记得加 includeFieldNames = true,否则美化过的字符串会被当成普通字符串再次转义美化只是调试辅助,别让它混进 API 响应体或数据库存储字段——多出的空白字符会增大体积、干扰签名验证、拖慢解析速度。
邮箱:8955556@qq.com
Q Q:8955556
本文详解如何将Go官方present工具(用于生成HTML5...
PySNMP在不同版本中对SNMP错误状态(errorSta...
time.Sleep仅阻塞当前goroutine,其他gor...
PHPfopen()创建含特殊符号的文件名失败主因是操作系统...
WooCommerce中通过代码为分组产品动态聚合子商品的属...
io.ReadFull返回io.ErrUnexpectedE...
本文详解Yii2中控制器向视图传递ActiveRecord数...
本文详解为何通过wp_set_object_terms()为...
Pytest中使用@mock.patch类装饰器会导致补丁泄...
带缓冲的channel是并发安全的FIFO队列;make(c...