I am using Jackson and would like to pretty-print JSON such that each element in arrays goes to each line, like:
{
  "foo" : "bar",
  "blah" : [
    1,
    2,
    3
  ]
}
Setting SerializationFeature.INDENT_OUTPUT true only inserts newline characters for object fields, not array elements, printing the object in this way instead:
{
  "foo" : "bar",
  "blah" : [1, 2, 3]
}
Does anyone know how to achieve this? Thanks!
If you don't want to extend DefaultPrettyPrinter you can also just set the indentArraysWith property externally:
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
DefaultPrettyPrinter prettyPrinter = new DefaultPrettyPrinter();
prettyPrinter.indentArraysWith(DefaultIndenter.SYSTEM_LINEFEED_INSTANCE);
String json = objectMapper.writer(prettyPrinter).writeValueAsString(object);
                        Thanks to the helpful hints, I was able to configure my ObjectMapper with desired indentation as follows:
private static class PrettyPrinter extends DefaultPrettyPrinter {
    public static final PrettyPrinter instance = new PrettyPrinter();
    public PrettyPrinter() {
        _arrayIndenter = Lf2SpacesIndenter.instance;
    }
}
private static class Factory extends JsonFactory {
    @Override
    protected JsonGenerator _createGenerator(Writer out, IOContext ctxt) throws IOException {
        return super._createGenerator(out, ctxt).setPrettyPrinter(PrettyPrinter.instance);
    }
}
{
    ObjectMapper mapper = new ObjectMapper(new Factory());
    mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
}
                        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