美文网首页
Jackson 格式化输出

Jackson 格式化输出

作者: 蓝笔头 | 来源:发表于2021-09-07 17:19 被阅读0次

1. 未格式化的打印

(1)需要序列化的类

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Info {
    private String name;
    private List<String> list;

    public static Info of(String name, List<String> list) {
        return Info.builder()
            .name(name)
            .list(list)
            .build();
    }
}

(2)序列化工具类

@UtilityClass
public class JsonUtils {
    private static ObjectMapper mapper = new ObjectMapper();

    @SneakyThrows
    public static String serialize(Object obj) {
        return mapper.writeValueAsString(obj);
    }
}

(3)测试类

public class TestMain {
    public static void main(String[] args) {
        Info info = Info.of("test", buildList(10));
        String json = JsonUtils.serialize(info);
        System.out.println(json);
    }

    public static List<String> buildList(int n) {
        List<String> list = new ArrayList<>();
        for (int i = 0; i < n; ++ i) {
            list.add(buildString(i, 10));
        }
        return list;
    }

    private static String buildString(int num, int len) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < len; ++ i) {
            sb.append(num);
        }
        return sb.toString();
    }
}

控制台输出:

{"name":"test","list":["0000000000","1111111111","2222222222","3333333333","4444444444","5555555555","6666666666","7777777777","8888888888","9999999999"]}

2. 格式化输出

@UtilityClass
public class JsonUtils {
    private static ObjectMapper mapper = new ObjectMapper();

    @SneakyThrows
    public static String serialize(Object obj) {
        ObjectWriter objectWriter = mapper.writerWithDefaultPrettyPrinter();
        return objectWriter.writeValueAsString(obj);
    }
}

运行上面的 TestMain 测试类,控制台输出如下:

{
  "name" : "test",
  "list" : [ "0000000000", "1111111111", "2222222222", "3333333333", "4444444444", "5555555555", "6666666666", "7777777777", "8888888888", "9999999999" ]
}

可以发现 List 元素全部在一行。

3. 格式化 List 输出

@UtilityClass
public class JsonUtils {
    private static ObjectMapper mapper = new ObjectMapper();

    @SneakyThrows
    public static String serialize(Object obj) {
        // 配置四个空格的缩进
        DefaultPrettyPrinter.Indenter indenter = new DefaultIndenter("    ", DefaultIndenter.SYS_LF);
        DefaultPrettyPrinter printer = new DefaultPrettyPrinter();
        printer.indentObjectsWith(indenter); // Indent JSON objects
        printer.indentArraysWith(indenter);  // Indent JSON arrays

        return mapper.writer(printer).writeValueAsString(obj);
    }
}

运行上面的 TestMain 测试类,控制台输出如下:

{
    "name" : "test",
    "list" : [
        "0000000000",
        "1111111111",
        "2222222222",
        "3333333333",
        "4444444444",
        "5555555555",
        "6666666666",
        "7777777777",
        "8888888888",
        "9999999999"
    ]
}

参考

相关文章

网友评论

      本文标题:Jackson 格式化输出

      本文链接:https://www.haomeiwen.com/subject/npdpwltx.html