1. 概述

在这个教程中,我们将深入探讨如何在Java中格式化JSON数据,以提高其可读性。

当处理复杂的JSON对象时,理解和调试它们可能是一项艰巨的任务。因此,采用美化JSON对象的实践变得至关重要。

我们将利用Jackson和Gson库的能力来实现这一目标,这些库提供了生成格式良好的JSON输出的便捷方法。

2. 使用Jackson进行美化JSON

2.1. 需求时美化JSON

为了实现按需美化JSON,我们可以使用writeWithDefaultPrettyPrinter()方法:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

结果将得到格式化的JSON对象:

@Test
public void shouldPrettyPrintJsonStringUsingDefaultPrettyPrinter() throws JsonProcessingException {
    JsonPrettyPrinter jsonPrettyPrinter = new JsonPrettyPrinter();
    String formattedJsonString = jsonPrettyPrinter.prettyPrintJsonUsingDefaultPrettyPrinter(uglyJsonString);
    System.out.println(formattedJsonString);
}
// output:
{
    "one" : "AAA",
    "two" : [ "BBB", "CCC" ],
    "three" : {
        "four" : "DDD",
        "five" : [ "EEE", "FFF" ]
    }
}

2.2. 全局美化JSON

通过全局启用INDENT_OUTPUT设置,我们可以确保整个系统生成的JSON字符串都以一致的可读方式格式化。现在让我们全局启用INDENT_OUTPUT设置:

public String prettyPrintUsingGlobalSetting(String uglyJsonString) {
    ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
    Object jsonObject = mapper.readValue(uglyJsonString, Object.class);
    String prettyJson = mapper.writeValueAsString(jsonObject);
    return prettyJson;
}

结果是格式化的JSON对象:

@Test
public void shouldPrettyPrintJsonStringUsingGlobalSetting() throws JsonProcessingException {
    JsonPrettyPrinter jsonPrettyPrinter = new JsonPrettyPrinter();
    String formattedJsonString = jsonPrettyPrinter.prettyPrintUsingGlobalSetting(uglyJsonString);
    System.out.println(formattedJsonString);
}
// output:
{
    "one" : "AAA",
    "two" : [ "BBB", "CCC" ],
    "three" : {
        "four" : "DDD",
        "five" : [ "EEE", "FFF" ]
    }
}

3. 使用Gson美化JSON

首先,添加Gson的Maven依赖:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>

始终从Maven中央仓库使用最新版本的gson。为了美化JSON,我们将使用GsonBuildersetPrettyPrinting()方法:

public String prettyPrintUsingGson(String uglyJson) {
    Gson gson = new GsonBuilder().setPrettyPrinting().create();
    JsonElement jsonElement = JsonParser.parseString(uglyJsonString);
    String prettyJsonString = gson.toJson(jsonElement);
    return prettyJsonString;
}

结果是格式化的JSON对象:

@Test
public void shouldPrettyPrintJsonStringUsingGson() {
    JsonPrettyPrinter jsonPrettyPrinter = new JsonPrettyPrinter();
    String formattedJsonString = jsonPrettyPrinter.prettyPrintUsingGson(uglyJsonString);
    System.out.println(formattedJsonString);
}
// output:
{
    "one": "AAA",
    "two": [
        "BBB",
        "CCC"
    ],
    "three": {
        "four": "DDD",
        "five": [
            "EEE",
            "FFF"
        ]
    }
}

4. 总结

在这篇文章中,我们探讨了在Java中实现JSON美化的方法。

本文的示例代码可以在GitHub上找到。