JavaでJSONにシリアライズしたいときはJSON-Bだと力不足なのでJacksonを使う事が多いのだけど、いつも書き方忘れるのでメモ。
整形せずにシリアライズする
データ交換用に整形せずにシリアライズするパターン。通常はこれ。
var item = Map.of("parent", Map.of("child", List.of("a", "b", "c")));
var json = new ObjectMapper().writeValueAsString(item);
結果
{"parent":{"child":["a","b","c"]}}
整形してフォーマットを綺麗にしたい場合 その1
画面出力や設定ファイル用にフォーマットを整えたい場合. INDENT_OUTPUTを使う
var item = Map.of("parent", Map.of("child", List.of("a", "b", "c")));
var mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
var json = mapper.writeValueAsString(item);
結果
{
"parent" : {
"child" : [ "a", "b", "c" ]
}
}
整形してフォーマットを綺麗にしたい場合 その2
さらに要素の配列を改行付きで表示したい場合。要素が長い時とか用。PrettyPrinterとSYSTEM_LINEFEED_INSTANCEを使う。
var item = Map.of("parent", Map.of("child", List.of("a", "b", "c")));
var printer = new DefaultPrettyPrinter();
printer.indentArraysWith(DefaultIndenter.SYSTEM_LINEFEED_INSTANCE);
var json = new ObjectMapper().writer(printer).writeValueAsString(item);
結果
{
"parent" : {
"child" : [
"a",
"b",
"c"
]
}
}