下面的示例演示如何漂亮地打印Jackson库生成的JSON字符串。为了产生格式正确的JSON字符串,我们创建ObjectMapper实例并启用该SerializationFeature.INDENT_OUTPUT功能。要启用此功能,我们需要调用的enable()方法ObjectMapper并提供要启用的功能。
ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT); String json = mapper.writeValueAsString(recording); System.out.println(json);
在下面的第二个示例中,我们格式化未格式化的JSON字符串。为此,我们使用ObjectMapper的readValue(String, Class<T>)方法,该方法接受JSON字符串Object.class作为值类型。该readValue()方法返回Object。要格式化JSON对象,我们调用mapper.writerWithDefaultPrettyPrinter().writeValueAsString(Object)。这将产生一个漂亮的JSON格式。
ObjectMapper mapper = new ObjectMapper(); Object jsonObject = mapper.readValue(json, Object.class); String prettyJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonObject); System.out.println(prettyJson);
以下是完整的代码段。
package org.nhooo.example.jackson;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import java.io.IOException;
import java.time.LocalDate;
import java.time.Month;
public class JsonIndentOutput {
    public static void main(String[] args) {
        JsonIndentOutput.formatObjectToJsonString();
        JsonIndentOutput.formatJsonString();
    }
    private static void formatObjectToJsonString() {
        Recording recording = new Recording();
        recording.setId(1L);
        recording.setTitle("Yellow Submarine");
        recording.setReleaseDate(LocalDate.of(1969, Month.JANUARY, 17));
        recording.setArtist(new Artist(1L, "The Beatles"));
        recording.setLabel(new Label(1L, "Apple"));
        ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
        try {
            String json = mapper.writeValueAsString(recording);
            System.out.println(json);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }
    private static void formatJsonString() {
        String json = "{\"id\":1,\"title\":\"Yellow Submarine\",\"releaseDate\":\"1969-01-17\",\"artist\":{\"id\":1,\"name\":\"The Beatles\"},\"label\":{\"id\":1,\"name\":\"Apple\"}}";
        ObjectMapper mapper = new ObjectMapper();
        try {
            Object jsonObject = mapper.readValue(json, Object.class);
            String prettyJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonObject);
            System.out.println(prettyJson);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}上面的代码片段将漂亮地打印以下JSON字符串:
{
  "id" : 1,
  "title" : "Yellow Submarine",
  "releaseDate" : "1969-01-17",
  "artist" : {
    "id" : 1,
    "name" : "The Beatles"
  },
  "label" : {
    "id" : 1,
    "name" : "Apple"
  }
}这是Recording类的结构。
package org.nhooo.example.jackson;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import java.time.LocalDate;
import java.util.Objects;
public class Recording {
    private Long id;
    private String title;
    @JsonDeserialize(using = LocalDateDeserializer.class)
    @JsonSerialize(using = LocalDateSerializer.class)
    private LocalDate releaseDate;
    private Artist artist;
    private Label label;
    public Recording() {
    }
    public Recording(Long id, String title, LocalDate releaseDate) {
        this.id = id;
        this.title = title;
        this.releaseDate = releaseDate;
    }
    // 吸气剂和二传手
}Maven依赖
<!-- http://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.8.6/jackson-databind-2.8.6.jar --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.6</version> </dependency>