object类本身不提供json转换能力,通用转换需依赖jackson等外部库;object.tostring()仅返回类名加哈希码,不符合json格式;jackson通过objectmapper.writevalueasstring()实现高效、自动的序列化,支持pojo、集合、日期等,且线程安全宜单例复用。

Object 类本身不提供 JSON 转换能力,它只是所有 Java 类的根类,没有内置序列化为 JSON 的方法。所谓“通用对象转 JSON”,实际依赖外部库(如 Jackson、Gson、FastJSON)配合反射机制实现,而非 Object 类自身功能。
为什么不能直接用 Object.toString()?
Object 的 toString() 方法默认只返回类名+哈希码(如 com.example.User@1a2b3c),不包含字段值,也不符合 JSON 格式。重写它虽可自定义输出,但需手动拼接字符串、处理引号/转义/嵌套等,极易出错且不可复用。
主流做法:用 Jackson 实现通用转换
Jackson 是最常用、稳定、高性能的 JSON 库。只需几行代码即可对任意非 null 对象(包括自定义类、List、Map 等)生成标准 JSON 字符串:
- 添加 Maven 依赖(Jackson Databind):
<dependency><br> <groupid>com.fasterxml.jackson.core</groupid><br> <artifactid>jackson-databind</artifactid><br> <version>2.15.3</version><br></dependency>
- 使用 ObjectMapper 实例执行转换:
ObjectMapper mapper = new ObjectMapper();<br>String json = mapper.writeValueAsString(obj); // obj 是任意 Object 子类实例
- 支持常见类型:POJO、数组、集合、日期(需配置序列化器)、null 值处理等
- 自动识别 public 字段和 getter 方法,无需额外注解(可选 @JsonProperty 控制字段名)
其他常用库对比
-
Gson(Google):API 简洁,
new Gson().toJson(obj)即可;对泛型支持好,但默认不处理 JDK8 时间类(需注册 TypeAdapter) - FastJSON(阿里,已停止维护):性能高,但存在历史安全漏洞,新项目不推荐;FastJSON2 是其演进版,可考虑
- Java 自带 JSON-B(JSR-367):标准但生态弱,实际使用极少,不建议用于新项目
注意事项与常见问题
- 对象中含循环引用(如父子双向关联)会抛
JsonMappingException,可用@JsonManagedReference/@JsonBackReference或配置mapper.configure(SerializationFeature.FAIL_ON_SELF_REFERENCES, false) - 私有字段默认可序列化(通过反射),但若禁用了反射或字段无 getter,需加
@JsonProperty注解 - 时间类型(LocalDateTime 等)需注册模块,例如 Jackson 中添加
mapper.registerModule(new JavaTimeModule()) - 避免反复创建 ObjectMapper 实例——它是线程安全的,应作为单例复用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











