0

0

java格式化输出json字符串_使用Gson或Jackson美化打印JSON

月夜之吻

月夜之吻

发布时间:2026-02-01 10:02:03

|

523人浏览过

|

来源于php中文网

原创

Gson需用GsonBuilder().setPrettyPrinting()启用格式化输出,Jackson需enable(SerializationFeature.INDENT_OUTPUT),org.json可用JSONObject.toString(indentFactor);三者均仅用于调试,不可用于生产响应或存储。

java格式化输出json字符串_使用gson或jackson美化打印json

用 Gson 的 GsonBuilder 启用格式化输出

默认 GsontoJson() 返回的是紧凑(minified)JSON 字符串,没有换行和缩进。要美化打印,必须显式构建带格式化选项的 Gson 实例。

关键点是调用 setPrettyPrinting(),它会启用缩进(2 空格)、换行和键排序(按字典序)。注意:该设置只影响序列化(toJson),不影响反序列化。

  • Gson gson = new GsonBuilder().setPrettyPrinting().create();
  • MapList、自定义 POJO 都生效
  • 如果对象含循环引用,setPrettyPrinting() 不会阻止 StackOverflowError,仍需配合 disableHtmlEscaping() 或自定义 TypeAdapter
  • 性能略低于默认 Gson(因生成更多空白字符),但调试阶段可忽略

用 Jackson 的 ObjectMapper 启用缩进输出

Jackson 默认也不格式化。需要配置 SerializationFeature.INDENT_OUTPUTtrue,这是最直接的方式。

与 Gson 不同,Jackson 的缩进是可配置的:默认用 2 空格,但可通过 DefaultIndenter 替换为制表符或自定义空格数。

立即学习Java免费学习笔记(深入)”;

  • ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
  • 若需 4 空格缩进:mapper.setDefaultPrettyPrinter(new DefaultPrettyPrinter().indentObjectsWith(new DefaultIndenter(" ", "\n")));
  • 注意 INDENT_OUTPUT 对 null 值、空集合、时间类型等保持原语义,不会额外添加字段
  • 若 JSON 中含 Unicode 字符(如中文),建议同时调用 configure(JsonGenerator.Feature.ESCAPE_NON_ASCII, true) 避免终端乱码

不依赖库时,用 org.jsonJSONObject.toString(indentFactor)

如果项目已引入 org.json(比如 Android 或轻量服务),它自带美化能力,无需额外引入 Gson/Jackson。

ClipDrop Relight
ClipDrop Relight

ClipDrop推出的AI图片图像打光工具

下载

toString(int) 参数是每级缩进的空格数,传 24 最常用;传 0 则退化为紧凑格式。

  • new JSONObject(jsonString).toString(2) —— 直接美化已有字符串(前提是合法 JSON)
  • 失败时抛 JSONException,所以务必 try-catch,尤其当输入不可信时
  • 不支持流式处理,必须加载整个 JSON 到内存;大 JSON(>1MB)易 OOM
  • 对日期、BigDecimal 等类型无特殊序列化逻辑,纯字符串解析/生成,适合简单场景

常见错误:美化后日志里出现多余换行或乱码

美化后的 JSON 含 \n 和空格,在 SLF4J / Log4j 等日志框架中可能被截断、折叠,或在 Kibana 等 UI 里显示为单行(因 HTML 渲染忽略空白)。

根本原因不是 JSON 本身错,而是日志输出链路未保留空白。解决思路分两层:

  • 确认日志 appender 是否启用了 layoutpattern 包含换行符支持(如 Logback 的 %replace(%msg){'\n', '\n'} 不够,要用
    %replace(%msg){'\n', '
    '}
    配合 HTML layout)
  • 更稳妥做法:调试时用 System.out.println() 或 IDE 控制台直接看;上生产环境应关闭美化,仅在 log.debug()isDebugEnabled() 为 true 时才调用美化方法
  • 若用 Lombok 的 @ToString 打印含 JSON 字段的对象,记得加 includeFieldNames = true,否则美化过的字符串会被当成普通字符串再次转义

美化只是调试辅助,别让它混进 API 响应体或数据库存储字段——多出的空白字符会增大体积、干扰签名验证、拖慢解析速度。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

422

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

536

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

313

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

77

2025.09.10

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

237

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

479

2024.03.01

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

340

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

54

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3.1万人学习

C# 教程
C# 教程

共94课时 | 8.2万人学习

Java 教程
Java 教程

共578课时 | 54.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号