java对象转json不依赖原生serializable,需用jackson、gson等库;jackson功能强且spring boot默认集成,gson api简洁;注意字段访问、循环引用、日期格式及忽略字段等配置。

Java 中对象序列化为 JSON 格式,**不是靠 Java 原生的序列化机制(如 Serializable 接口 + ObjectOutputStream)实现的**,而是需要借助第三方 JSON 库将对象的字段值转换为 JSON 字符串。原生序列化生成的是二进制字节流(或可读性差的 base64 编码),与 JSON 的文本结构完全不同。
常用 JSON 库推荐
主流选择有 Jackson、Gson 和 FastJSON(注意:FastJSON 存在历史安全风险,新项目建议优先考虑 Jackson 或 Gson):
- Jackson(最常用,Spring Boot 默认集成):功能强、性能好、生态完善
- Gson(Google 出品):API 简单,对泛型和 null 处理友好
用 Jackson 将对象转为 JSON 字符串
添加 Maven 依赖(Jackson Databind):
代码示例:
ObjectMapper mapper = new ObjectMapper();
User user = new User("Alice", 28);
String json = mapper.writeValueAsString(user); // 自动序列化为 {"name":"Alice","age":28}
注意:User 类需有 public getter 方法(或加 @JsonProperty 注解),否则字段可能无法被识别。
用 Gson 将对象转为 JSON 字符串
添加依赖:
代码示例:
Gson gson = new Gson();
User user = new User("Bob", 30);
String json = gson.toJson(user); // 输出同上
默认支持常见类型;如需格式化输出(带缩进),可用 new GsonBuilder().setPrettyPrinting().create()。
注意事项和常见问题
- 私有字段默认可被序列化(Jackson/Gson 都支持),但 final 字段或无 getter 的字段可能被忽略
- 循环引用(如 A 引用 B,B 又引用 A)会导致 StackOverflowError,Jackson 可用
@JsonManagedReference/@JsonBackReference处理 - 日期类型默认转成时间戳,如需 "yyyy-MM-dd HH:mm:ss" 格式,Jackson 可配置
SimpleDateFormat,Gson 可注册 TypeAdapter - 忽略某些字段:Jackson 用
@JsonIgnore,Gson 用@Expose+GsonBuilder.excludeFieldsWithoutExposeAnnotation()
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











