POJO 转 JSON
使用 Jackson、Gson 或 Moshi 将 Java 的 POJO(Plain Old Java Object)实例转换为 JSON。代码片段可直接复制粘贴运行,并附带反向转换工具,方便你在需要时重建同一个 POJO 类。
Jackson —— Spring 默认使用
Spring Boot ships Jackson by default. ObjectMapper is thread-safe — reuse a single instance.
import com.fasterxml.jackson.databind.ObjectMapper;
private static final ObjectMapper MAPPER = new ObjectMapper();
public static String toJson(Object pojo) throws JsonProcessingException {
return MAPPER.writeValueAsString(pojo);
}
// Pretty-printed:
String pretty = MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(pojo);
Annotate fields with @JsonProperty("snake_case") when the JSON field name differs from the Java field. @JsonIgnore skips a field; @JsonInclude(NON_NULL) drops nulls.
Gson —— 依赖最小,对 Android 友好
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
private static final Gson GSON = new GsonBuilder()
.serializeNulls() // include null fields
.setPrettyPrinting() // optional
.create();
public static String toJson(Object pojo) {
return GSON.toJson(pojo);
}
Use @SerializedName("json_field") on a Java field to override the JSON key. Mark fields transient to skip them.
Moshi —— 优先支持 Kotlin,可选代码生成
import com.squareup.moshi.Moshi;
import com.squareup.moshi.JsonAdapter;
Moshi moshi = new Moshi.Builder().build();
JsonAdapter<User> adapter = moshi.adapter(User.class);
String json = adapter.toJson(user);
// Pretty:
String pretty = adapter.indent(" ").toJson(user);
POJO 转 JSON 与其他替代方案的对比
| Concern | Jackson | Gson | Moshi |
|---|---|---|---|
| Default in Spring Boot | Jackson | Jackson | — |
| Smallest jar | Gson (~280KB) | Jackson (3 modules ~2MB) | — |
| Kotlin support | Moshi (best) | Jackson kotlin module | Gson (kludgy) |
| Annotation-free path | Jackson + naming strategy | Gson + FieldNamingPolicy | Moshi reflection adapter |
| Streaming API | JsonGenerator | JsonWriter | JsonWriter |
常见问题
该用哪个库把 POJO 转换成 JSON?
如果是 Spring Boot 项目,推荐使用 Jackson——它已经内置在框架里,技术栈的其他部分也默认依赖它。如果是 Android 或对依赖体积敏感的 CLI 项目,可以选择 Gson(体积更小)或 Moshi(对 Kotlin 支持更好)。这三者都能处理同一个 POJO;区别主要在于与生态系统的契合度,而不是处理能力上的差异。
如何重命名 JSON 输出中的字段?
Jackson:<code class="font-mono">@JsonProperty("name")</code>。Gson:<code class="font-mono">@SerializedName("name")</code>。Moshi:<code class="font-mono">@Json(name = "name")</code>。这三个注解都直接加在字段声明上。
如何忽略 null 或空字段?
Jackson:在类或字段上加 <code class="font-mono">@JsonInclude(JsonInclude.Include.NON_NULL)</code>。Gson:默认会丢弃 null 值——如果想保留,需要在 builder 上调用 <code class="font-mono">.serializeNulls()</code>。Moshi:同样默认丢弃 null 值,除非 adapter 配置了 <code class="font-mono">.serializeNulls()</code>。
为什么我的 POJO 序列化不了——只输出一个空对象 {}?
Jackson 需要 public 的 getter 或默认构造函数,并且字段要能被访问到。如果使用了 Lombok,请确认已加上 <code class="font-mono">@Getter</code>(或 <code class="font-mono">@Data</code>)。对于 record(Java 16+),访问器方法会自动生成。
能不写 Java 代码就把 POJO 转换成 JSON 吗?
严格来说不行——JSON 序列化依赖于 Java 实例在运行时实际持有的值,所以必须有一个真正运行的 JVM。你不写代码也能做的是:先用我们的 <a class="underline" href="/json-to-java">JSON to Java POJO</a> 工具,根据一段 JSON 示例生成对应的 POJO 类,然后把上面的代码示例套用到你的项目里。
这种转换会丢失数据吗?
对于原始类型(primitive)和 String 不会丢失数据。但有些 Java 类型需要专门的 adapter:<code class="font-mono">LocalDateTime</code>(Jackson:需注册 <code class="font-mono">JavaTimeModule</code>)、<code class="font-mono">BigDecimal</code> 的精度(Jackson:<code class="font-mono">USE_BIG_DECIMAL_FOR_FLOATS</code>),以及 <code class="font-mono">enum</code> 的值(可以配置使用 <code class="font-mono">name()</code> 或 <code class="font-mono">ordinal()</code>)。
需要反向转换?
粘贴一段 JSON 示例,即可得到带类型的 Java POJO 类——支持 Jackson、Lombok 或 record 风格,嵌套类会自动生成。
打开 JSON to Java POJO →什么是 POJO 转 JSON?
POJO 转 JSON 是指把一个 Java 实例——即包含字段、getter 和 setter 的 Plain Old Java Object——序列化为 JSON 字符串的过程。常用的标准库有 Jackson(`ObjectMapper.writeValueAsString(obj)`)、Gson(`new Gson().toJson(obj)`)和 Moshi(`moshi.adapter(MyType.class).toJson(obj)`)。每个库都会通过反射遍历对象的字段,应用相应注解(如果有的话,例如 `@JsonProperty`、`@SerializedName`),然后生成合法的 JSON。
功能特性
Jackson、Gson 和 Moshi 示例代码
适用于 Spring Boot、Android 和 Kotlin 项目中三种常见序列化器的可直接复制代码片段。
字段重命名
@JsonProperty(Jackson)、@SerializedName(Gson)和 @Json(Moshi)可将 Java 字段映射为不同的 JSON 键。
Null 与字段控制
按不同库的方式包含或排除 null 字段,并跳过 transient 或被忽略的字段。
库对比
并列比较各库的权衡取舍——jar 包大小、Kotlin 支持、流式 API 以及无需注解的选项。
示例
Input
class User { Integer id = 42; String name = "Ada"; boolean active = true; } // new ObjectMapper().writeValueAsString(user)
Output
{"id":42,"name":"Ada","active":true}
常见使用场景
-
1
序列化 Spring Boot 响应
使用 Jackson 示例在 REST 控制器中将 POJO 转换为 JSON。
-
2
重命名 JSON 键
应用合适的注解,将驼峰命名的 Java 字段输出为蛇形命名(snake_case)的 JSON 键。
-
3
选择 JSON 库
对比 Jackson、Gson 和 Moshi,为你的技术栈选出最合适的库。
Zerethon 的 POJO to JSON 页面是一份可直接复制粘贴的参考文档,介绍如何使用三大主流库——Jackson、Gson 和 Moshi——将 Java 对象序列化为 JSON,并提供重命名字段、跳过 null 值、处理日期和枚举的示例代码。由于 JSON 序列化需要读取运行中对象的字段值,因此必须依赖正在运行的 JVM,所以本页面是一份快速参考,而非浏览器内转换工具。如果需要反向操作,从 JSON 示例生成 Java 类,请使用 JSON to Java POJO 工具。
- 分类
- 开发者
- 价格
- 免费
- 隐私
- 基于浏览器
- 注册
- 无需
参考资料
- Jackson Databind — FasterXML
- Gson 用户指南 — Google
- Moshi — Square
- RFC 8259 — JSON 数据交换格式 — IETF
隐私
除非另有说明,否则你的数据永远不会离开浏览器。POJO 转 JSON 完全在客户端运行 — 无需上传服务器,不记录日志,不追踪你输入的内容。
相关工具
在 Zerethon Social 上创作、分享与成长
免费注册。赚取积分,收集成就,与全球创作者建立联系。