我有一个json字符串,我想用jackson漂亮地打印出来。一般而言,以下作品:

    ObjectWriter w = new ObjectMapper()
            .writer()
            .withDefaultPrettyPrinter();

    Object obj = new ObjectMapper().readValue(json, Object.class);
    System.out.println(w.writeValueAsString(obj));


结果:

{
   "myarray" : [ {
      "field" : "val"
   } ]
}


但是:我想得到的输出参数之间没有空格。那可能吗?

所需的输出:

{
   "myarray":[{
      "field":"val"
   }]
}

最佳答案

是。您可以使用以下内容自定义DefaultPrettyPrinter


使用withoutSpacesInObjectEntries()关闭空格
在对象条目内
将数组压头设置为DefaultPrettyPrinter.NopIndenter,以便没有空格分隔数组值。


明智的代码,它看起来像:

DefaultPrettyPrinter pp = new DefaultPrettyPrinter()
            .withoutSpacesInObjectEntries()
            .withArrayIndenter(new DefaultPrettyPrinter.NopIndenter());

ObjectWriter w = new ObjectMapper()
            .writer()
            .with(pp);


它将以以下格式输出JSON:

{
  "users":[{
    "name":"u1",
    "age":10
  },{
    "name":"u2",
    "age":20
  }]
}

09-11 18:11