java中将复杂对象序列化为json最常用可靠的方式是jackson库(objectmapper),支持嵌套对象、集合、泛型、日期、枚举等,通过writevalueasstring()即可完成,且提供空值处理、格式化输出、日期自定义等扩展能力。

Java 中将复杂对象序列化为 JSON 字符串,最常用、最可靠的方式是使用 Jackson 库(尤其是 ObjectMapper)。它天然支持嵌套对象、集合、泛型、日期、枚举等常见复杂结构,无需额外配置即可处理大多数场景。
引入 Jackson 依赖
如果是 Maven 项目,在 pom.xml 中添加:
<dependency><groupid>com.fasterxml.jackson.core</groupid><artifactid>jackson-databind</artifactid><version>2.15.3</version></dependency>
注意:jackson-databind 会自动拉取 jackson-core 和 jackson-annotations,三者版本需一致。
Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。
基础序列化操作
创建 ObjectMapper 实例(建议复用单例,避免频繁创建开销),调用 writeValueAsString() 即可:
ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(yourComplexObject);
- 支持任意深度的嵌套对象(如
User包含Address,Address又包含City) - 自动处理
List<role></role>、Map<string object></string>等集合类型 - 默认将
LocalDateTime序列化为 ISO 格式字符串(如"2024-06-15T14:30:00")
处理常见复杂情况
实际开发中常遇到以下需求,Jackson 均有简洁解法:
-
忽略空值或 null 字段:
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); -
格式化输出(带缩进):
mapper.enable(SerializationFeature.INDENT_OUTPUT); -
自定义日期格式:
mapper.registerModule(new JavaTimeModule().addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); -
忽略某些字段(不序列化):在字段上加
@JsonIgnore,或类上加@JsonIgnoreProperties({"password", "tempData"})
保存到文件或数据库
得到 JSON 字符串后,保存方式取决于目标:
-
写入文件:用
Files.write(Paths.get("data.json"), json.getBytes(StandardCharsets.UTF_8)); - 存入数据库(如 MySQL TEXT 或 JSON 类型字段):直接作为字符串传入 PreparedStatement 参数即可
- 返回给前端(Spring Boot):Controller 方法返回对象,Spring 自动用 Jackson 转 JSON,无需手动调用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










