The following example demonstrates how to pretty print the JSON string produces by Jackson library. To produce well formatted JSON string we create the ObjectMapper
instance and enable the SerializationFeature.INDENT_OUTPUT
feature. To enable this feature we need to call the enable()
method of the ObjectMapper
and provide the feature to be enabled.
ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
String json = mapper.writeValueAsString(recording);
System.out.println(json);
On the second example below we format unformatted JSON string. To do this we use the ObjectMapper
‘s readValue(String, Class<T>)
method which accept the JSON string and Object.class
as the value type. The readValue()
method return an Object
. To format the JSON object we call mapper.writerWithDefaultPrettyPrinter().writeValueAsString(Object)
. This will produce a pretty formatted JSON.
ObjectMapper mapper = new ObjectMapper();
Object jsonObject = mapper.readValue(json, Object.class);
String prettyJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonObject);
System.out.println(prettyJson);
Below is the complete code snippets.
package org.kodejava.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();
}
}
}
The code snippet above will pretty print the following JSON string:
{
"id" : 1,
"title" : "Yellow Submarine",
"releaseDate" : "1969-01-17",
"artist" : {
"id" : 1,
"name" : "The Beatles"
},
"label" : {
"id" : 1,
"name" : "Apple"
}
}
Here are the structure of Recording
class.
package org.kodejava.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;
}
// Getters and Setters
}
Maven Dependencies
<!-- 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>