Jackson による整形したJSONのテキスト出力は、これという1つが決めることができない。
例)
{"A":"Blue","B":[10,12,14],"C":[{"length":[100,120,140]},{"length":[100,120,140]}]}
DefaultPrettyPrinter の indentObjectsWith と indentArraysWith を指定する方法
public static <T> String prettyString(T t) { DefaultPrettyPrinter.Indenter indenter = new DefaultIndenter(" ", DefaultIndenter.SYS_LF); DefaultPrettyPrinter printer = new DefaultPrettyPrinter(); printer.indentObjectsWith(indenter); printer.indentArraysWith(indenter); try{ return new ObjectMapper().writer(printer).writeValueAsString(t); }catch(JsonProcessingException e){ throw new RuntimeException(e.getMessage(), e); } }
この結果は、
{ "A" : "Blue", "B" : [ 10, 12, 14 ], "C" : [ { "length" : [ 100, 120, 140 ] }, { "length" : [ 100, 120, 140 ] } ] }
長い!配列は、1行にしたい。。。
indentArraysWith を実行しないようにする。
public static <T> String prettyString(T t) { DefaultPrettyPrinter.Indenter indenter = new DefaultIndenter(" ", DefaultIndenter.SYS_LF); DefaultPrettyPrinter printer = new DefaultPrettyPrinter(); printer.indentObjectsWith(indenter); try{ return new ObjectMapper().writer(printer).writeValueAsString(t); }catch(JsonProcessingException e){ throw new RuntimeException(e.getMessage(), e); } }
すると、単純な配列は1行だが、ネストした配列は、、、
{ "A" : "Blue", "B" : [ 10, 12, 14 ], "C" : [ { "length" : [ 100, 120, 140 ] }, { "length" : [ 100, 120, 140 ] } ] }
でもこれは、、
ObjectMapper の writerWithDefaultPrettyPrinter() を使えば同じこと。
public static <T> String prettyString(T t) { try{ return new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(t); }catch(JsonProcessingException e){ throw new RuntimeException(e.getMessage(), e); } }