I have a json string that I want to pretty print with jackson. The following works in general:
ObjectWriter w = new ObjectMapper()
.writer()
.withDefaultPrettyPrinter();
Object obj = new ObjectMapper().readValue(json, Object.class);
System.out.println(w.writeValueAsString(obj));
Result:
{
"myarray" : [ {
"field" : "val"
} ]
}
BUT: I'd like to get the output without whitespaces between parameters. Is that possible?
Desired output:
{
"myarray":[{
"field":"val"
}]
}
Yes. You can customise the DefaultPrettyPrinter with the followings:
Use withoutSpacesInObjectEntries() to turn off spaces
inside the object entries
Set the array indenter to DefaultPrettyPrinter.NopIndenter such that there is no spaces to separate the array value.
Code wise , it looks like :
DefaultPrettyPrinter pp = new DefaultPrettyPrinter()
.withoutSpacesInObjectEntries()
.withArrayIndenter(new DefaultPrettyPrinter.NopIndenter());
ObjectWriter w = new ObjectMapper()
.writer()
.with(pp);
It will output the JSON with the format like :
{
"users":[{
"name":"u1",
"age":10
},{
"name":"u2",
"age":20
}]
}
If you would like to get something like this (spaces only after colons and entities of the array are separated by line breaks)
{
"users": [
{
"name": "u1",
"age": 10
},
{
"name": "u2",
"age": 20
}
]
}
you should use custom PrettyPrinter implementation:
public class CustomPrettyPrinter extends DefaultPrettyPrinter {
public CustomPrettyPrinter() {
super._arrayIndenter = new DefaultIndenter();
super._objectFieldValueSeparatorWithSpaces = _separators.getObjectFieldValueSeparator() + " ";
}
@Override
public CustomPrettyPrinter createInstance() {
return new CustomPrettyPrinter();
}
}
using the following code:
ObjectWriter writer = new ObjectMapper()
.writer()
.with(new CustomPrettyPrinter());
String result = writer.writeValueAsString(obj);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With