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。
POJO 转 JSON 是 Zerethon Tools 提供的免费 开发者 工具。使用 Jackson、Gson 或 Moshi 将 Java 的 POJO(Plain Old Java Object)实例转换为 JSON。代码片段可直接复制粘贴运行,并附带反向转换工具,方便你在需要时重建同一个 POJO 类。. 完全在浏览器中运行 — 无需注册,无需上传。
- 分类
- 开发者
- 价格
- 免费
- 隐私
- 基于浏览器
- 注册
- 无需
隐私
除非另有说明,否则你的数据永远不会离开浏览器。POJO 转 JSON 完全在客户端运行 — 无需上传服务器,不记录日志,不追踪你输入的内容。
相关工具
在 Zerethon Social 上创作、分享与成长
免费注册。赚取积分,收集成就,与全球创作者建立联系。