JSON 转 Java 类
粘贴一段 JSON 示例,生成器便会输出一个或多个 Java 类,包含正确的字段类型、getter、setter 以及 JSON 库注解。支持 Jackson(@JsonProperty)、Gson(@SerializedName)和 Lombok(@Data/@Builder),让代码更简洁。嵌套对象会根据你所选的布局,成为内部类或同级类。
如何将 JSON 转换为 Java
-
1
粘贴 JSON
单个示例即可;提供多个示例有助于更准确地判断字段是否可为空。
-
2
选择库
Jackson(在 Spring 中最常用)、Gson(用于 Android 和部分旧项目),或不带注解的纯 POJO。
-
3
选择附加选项
Lombok 可自动生成 getter/setter、构建器模式以及 equals/hashCode;也可以保持纯净不加任何注解。
-
4
选择嵌套风格
同一文件中的同级类(Java 17+ 的 public 类必须放在各自独立的文件中),或嵌套的静态类。
-
5
复制代码
直接放入你的项目。类名与 JSON 键名一致;包名按你的配置设置。
示例输出:Jackson + Lombok
输入:
{ "firstName": "Alice", "age": 30, "address": { "city": "Madrid" } }
输出:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
@JsonProperty("firstName")
private String firstName;
@JsonProperty("age")
private int age;
@JsonProperty("address")
private Address address;
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Address {
@JsonProperty("city")
private String city;
}
类型映射
| JSON | Java 类型 |
|---|---|
| 字符串 | String |
| 整数(≤ Integer.MAX) | Integer / int |
| 大整数 | Long / BigInteger |
| 小数 | Double / BigDecimal |
| 布尔值 | Boolean / boolean |
| ISO 日期 | LocalDate(Jackson JSR-310) |
| ISO 日期时间 | Instant / OffsetDateTime |
| null(存在非空的同级字段) | 包装类型(例如 Integer) |
| 数组 | List<T> |
| 对象 | 嵌套类 |
装箱类型与基本类型的选择
- 基本类型(
int、long、boolean),不可为空,高效,无自动装箱开销。 - 装箱类型(
Integer、Long、Boolean),可为空,当字段在 JSON 中可能缺失或为 null 时必须使用。
对于任何被判定为可为空的字段,生成器默认使用装箱类型,其余则使用基本类型。
Jackson 与 Gson 对比
| 特性 | Jackson | Gson |
|---|---|---|
| 在 Spring 中的普及度 | 是,默认选择 | 否(需要额外配置) |
| 性能 | 更快 | 更慢 |
| JSR-310 日期支持 | 通过额外模块 | 通过额外模块 |
| 多态支持 | @JsonTypeInfo |
RuntimeTypeAdapter |
| 尾随逗号容忍度 | 否(默认) | 是 |
常见错误
- 对可为空的字段使用基本类型。
int不能为 null;如果 JSON 中出现"age": null,Jackson 会抛出异常。请改用Integer。 - 缺少日期模块。 Jackson 需要
jackson-datatype-jsr310才能支持Instant/LocalDate。缺少它时,日期会退化为String或纪元长整数。 - 在不相关的类之间共用包装类型。 如果两个 JSON 结构都包含嵌套的
Address,生成器会创建两个Address类。请手动重命名或合并。 - 忘记添加
@JsonIgnoreProperties(ignoreUnknown = true)。 严格模式下的 Jackson 遇到未知属性会抛出异常;添加此注解(或进行全局配置)可实现更宽容的反序列化。
常见问题
大多数情况下选 Jackson,它是 Spring 的默认选择,速度更快,多态支持也更丰富。Gson 更轻量,在 Android 中更为人熟知,不过如今 Android 项目越来越多地转向 Moshi 或 kotlinx.serialization。
Lombok 能省去大量样板代码(getter、setter、equals、hashCode、builder)。它应用广泛,但需要在构建中引入 Lombok 注解处理器。如果你的项目出于依赖整洁的考虑而避免使用 Lombok,可将其禁用。
在任一观测样本中为 null 的字段会转为装箱类型(用 Integer 而非 int),以便能够容纳 null。这样 Jackson 就能无错地反序列化 "age": null。添加 @JsonInclude(Include.NON_NULL) 可在序列化时跳过 null 值。
会的,只要选择 “record”。record 简洁、不可变,并且兼容 Jackson 2.12+。对于 Spring Boot 3 项目,使用 record 加上不依赖 Lombok 的生成方式是当下的现代之选。
相关工具
ASCII 表参考
完整 ASCII 表,覆盖 0 到 127;列出每个代码的十进制、十六进制、八进制、二进制值和 HTML 数字字符引用写法,包括 NUL、LF、DEL。
HTML 字符参考
可搜索的 HTML 实体列表,含命名代码与数值代码,并支持一键复制特殊字符和符号。
键盘快捷键参考
搜索 macOS、Windows 和 Linux 上 VS Code、Chrome 以及使用 GNU Readline 的 Bash 的文档默认快捷键。
邮箱验证器
验证邮箱地址:RFC 5322 语法检查、实时 MX 记录查询,并显示本地部分、域名和长度详情。不会发送任何邮件。
编辑器配置生成器
根据你的缩进样式与大小、行尾、字符集和空格规则生成 .editorconfig 文件,让不同集成开发环境(IDE)和编辑器的格式保持一致。
证书解码器
粘贴一张 X.509 PEM 证书,并查看解码后的字段:主体、颁发者、序列号、签名算法、有效期及主体备用名称(SAN)。
此工具还提供其他语言版本
- JSON vers classe Java [FR]
- JSON till Java-klass [SV]
- JSON เป็นคลาส Java [TH]
- JSON إلى فئة Java [AR]
- JSON ke Kelas Java [ID]
- JSON sang lớp Java [VI]
- JSON을 Java 클래스로 [KO]
- JSON zu Java-Klasse [DE]
- JSON a Clase Java [ES]
- JSON naar Java-klasse [NL]
- JSON na klasę Java [PL]
- JSON から Java クラスへ [JA]
- JSON para Classe Java [PT]
- JSON в класс Java [RU]
- JSON'dan Java Sınıfına [TR]
- JSON to Java Class [EN]
- JSON in classe Java [IT]