Jackson 是 Java 和 Spring Boot 中最常用的序列化和反序列化库之一,主要用于 POJO 和 JSON 之间的解析和转换。
但是,如果您与 Jackson 合作过,您会注意到默认情况下明显缺乏漂亮的打印:
{Task 1=In_Progress, Task 2=Done, Task 3=Planned}
在这个简短的教程中,您将学习如何在标准 Java 和 Spring Boot 中使用 Jackson 打印 JSON。
我们将使用 JSON 字符串和转换为 JSON 字符串的 POJO,因为它们的行为不同:
public class Book {
private String title;
private String author;
private int releaseYear;
public Book(String title, String author, int releaseYear) {
this.title = title;
this.author = author;
this.releaseYear = releaseYear;
}
让我们实例化一个 Book
实例,以及输入的字符串:
String inputString = "{n" +
""Task 1" : "In_Progress",n" +
""Task 2" : "Done",n" +
""Task 3" : "Planned"n" +
"}";
Book book = new Book("Our Mathematical Universe", "Max Tegmark", 2014);
与杰克逊一起漂亮打印 JSON
如果您只想在一次调用中简单地打印一次,而不是设置全局打印标志 - 您可以简单地使用 writerWithDefaultPrettyPrinter()
在将值写入字符串之前调用:
ObjectMapper mapper = new ObjectMapper();
Object jsonString = mapper.readValue(inputString, Object.class);
String indentedString = mapper.writerWithDefaultPrettyPrinter()
.writeValueAsString(jsonString);
System.out.println(jsonString);
System.out.println(indentedString);
输入字符串是从 (JSON-to-Object) 读取的,并且这个对象的值被写回字符串,使用漂亮打印 (Object-to-JSON):
{Task 1=In_Progress, Task 2=Done, Task 3=Planned}
{
"Task 1" : "In_Progress",
"Task 2" : "Done",
"Task 3" : "Planned"
}
或者,当使用 readTree()
, 所结果的 JsonNode
有一个 toPrettyString()
函数作为将字符串转换为漂亮打印 JSON 的一种非常简单的方法:
ObjectMapper mapper = new ObjectMapper();
Object jsonString = mapper.readTree(inputString).toPrettyString();
System.out.println(jsonString);
这是格式化输入 JSON 字符串的一种快速简单的方法! 使用 POJO 时,我们不会从给定的输入中读取数据,而是只执行 Object-to-JSON 转换并启用漂亮打印:
ObjectMapper mapper = new ObjectMapper();
String jsonBook = mapper.writeValueAsString(book);
String indentedBook = mapper.writerWithDefaultPrettyPrinter()
.writeValueAsString(book);
System.out.println(jsonBook);
System.out.println(indentedBook);
{"title":"Our Mathematical Universe","author":"Max Tegmark","releaseYear":2014}
{
"title" : "Our Mathematical Universe",
"author" : "Max Tegmark",
"releaseYear" : 2014
}
全局漂亮打印设置
或者,您可以启用全局漂亮打印,如果这是 Jackson 对您的项目更可取的全局行为。 这就像使用 enable()
的方法 ObjectMapper()
实例化它时的实例:
ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
一旦您将对象编写为 JSON 字符串 - 默认情况下将启用漂亮打印:
Object jsonString = mapper.readValue(inputString, Object.class);
String indentedString = mapper.writeValueAsString(jsonString);
System.out.println(jsonString);
System.out.println(indentedString);
结果是:
{Task 1=In_Progress, Task 2=Done, Task 3=Planned}
{
"Task 1" : "In_Progress",
"Task 2" : "Done",
"Task 3" : "Planned"
}
使用 POJO:
String jsonBook = mapper.writeValueAsString(book);
System.out.println(jsonBook);
查看我们的 Git 学习实践指南,其中包含最佳实践、行业认可的标准以及随附的备忘单。 停止谷歌搜索 Git 命令,实际上 学习 它!
{
"title" : "Our Mathematical Universe",
"author" : "Max Tegmark",
"releaseYear" : 2014
}
如果漂亮打印是一种常见的显示格式,那么这种方法就不会那么冗长了。
带有 Spring Boot 的漂亮印花 Jackson
如果您使用的是 Spring Boot,则无需手册 ObjectMapper
正在创建的实例并依赖于底层序列化程序,您可以设置 indent_output
标记为 true
,在 application.properties
文件:
spring.jackson.serialization.indent_output=true
或者,在 application.yaml
:
spring:
jackson:
serialization:
INDENT_OUTPUT: true
这设置了 SerializationFeature.INDENT_OUTPUT
春天的旗帜 ObjectMapper
实例。
结论
在这个简短的教程中,我们了解了如何使用 Jackson 从字符串或 POJO 中漂亮地打印 JSON。 我们已经探索了单打印更改(当您只想打印一次时)并为 ObjectMapper
. 最后,我们查看了更改 Spring Boot 属性以启用 Jackson 的漂亮打印。