跳到主要内容
Z

POJO 转 JSON

使用 Jackson、Gson 或 Moshi 将 Java 的 POJO(Plain Old Java Object)实例转换为 JSON。代码片段可直接复制粘贴运行,并附带反向转换工具,方便你在需要时重建同一个 POJO 类。

免费 无需注册 客户端运行 注重隐私 Updated
注意: POJO → POJO 转 JSON 是一个需要 JVM 运行时的过程(序列化器需要读取字段的实际值)。下面的代码示例运行在你自己的应用程序中;本页面仅作快速参考。需要反过来操作——把 JSON 转换成 Java POJO 类?使用 JSON to Java 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 与其他替代方案的对比

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. 1

    序列化 Spring Boot 响应

    使用 Jackson 示例在 REST 控制器中将 POJO 转换为 JSON。

  2. 2

    重命名 JSON 键

    应用合适的注解,将驼峰命名的 Java 字段输出为蛇形命名(snake_case)的 JSON 键。

  3. 3

    选择 JSON 库

    对比 Jackson、Gson 和 Moshi,为你的技术栈选出最合适的库。

概要

Zerethon 的 POJO to JSON 页面是一份可直接复制粘贴的参考文档,介绍如何使用三大主流库——Jackson、Gson 和 Moshi——将 Java 对象序列化为 JSON,并提供重命名字段、跳过 null 值、处理日期和枚举的示例代码。由于 JSON 序列化需要读取运行中对象的字段值,因此必须依赖正在运行的 JVM,所以本页面是一份快速参考,而非浏览器内转换工具。如果需要反向操作,从 JSON 示例生成 Java 类,请使用 JSON to Java POJO 工具。

分类
开发者
价格
免费
隐私
基于浏览器
注册
无需

参考资料

隐私

除非另有说明,否则你的数据永远不会离开浏览器。POJO 转 JSON 完全在客户端运行 — 无需上传服务器,不记录日志,不追踪你输入的内容。

相关工具

在 Zerethon Social 上创作、分享与成长

免费注册。赚取积分,收集成就,与全球创作者建立联系。

免费注册