JAVA

JSON 转 Java Class

生成 Java Record 或 POJO Class、嵌套模型与可选 Jackson 注解

JSON 与数据
🔒 100% 本地运行 — 你的数据不会离开当前页面
由 Evan 维护•最近更新:2026年9月30日
JSON → Java models

根据样本推断,不是完整 API 契约。字段缺失与显式 null 分别推断,输出类型可能合并两者;数组内的 null 单独保留可空性。重复键和会改变数值的输入会报错。

上限:1 MiB、64 层、20,000 个值、200 个模型、2,000 个模型字段。精确大整数或金额请用字符串。

目标:Java 17+ 与 Jackson 2.x。生成包内可见类型;跨包使用时请拆成同名文件并添加 public。公开字段 POJO 不生成 getter;Jackson 模式拒绝空键。键名最多 16,000 个 UTF-16 码元,Record 最多 254 个字段。

Java models

生成后请在目标项目编译,并用代表性响应验证反序列化。

工具说明

JSON 转 Java Class 从一个对象或多个对象样本推断 Java 17+ Record 或含公开字段的 POJO。Jackson 2.x 注解在标识符规范化后保留原 JSON 键;关闭注解时需要项目命名策略或自定义映射。Jackson 模式拒绝空 JSON 键,因为 JsonProperty("") 表示默认名称,不能指向空键。字段使用装箱 Long、Double、Boolean,字符串使用 String,数组使用 List,不兼容混合值使用 Object。推断会分别观察缺失与 null,但生成 Java 模型中二者都可能变成 null,模型不保存字段出现历史。空 POJO 带序列化标记,可由 Jackson 写出空对象。生成类型为包内可见,允许同一个文件包含全部声明;作为公开 API 时,请拆成同名文件并按需添加 public。本地解析限制为 1 MiB、64 层、20,000 个值、200 个模型与 2,000 个字段,并检查重复键与数值损失。精确大 ID 或小数请用字符串。工具不自动选择 BigDecimal、时间类、枚举或校验约束,使用前应编译并验证代表性响应的反序列化。 JVM 还要求:JSON 键最多 16,000 个 UTF-16 码元,Record 最多 254 个字段,生成标识符会先缩短至 80 字符再分配唯一后缀。POJO 模式可避开过大的 Record 构造函数。

场景配方

01

编译包含冲突 JSON 键的 Record

目标:两个原始键保持映射,不生成非法 Record 访问器。

  1. 粘贴 {"getClass":1,"class":2},选择 Java Record 并开启 Jackson。
  2. 生成并检查重命名后的 getClassValue 与 classValue。
  3. 使用 Java 17+ 和 Jackson 编译,读入原样本并核对两个值。

结果:两个原始键保持映射,不生成非法 Record 访问器。

失败门诊(高频踩坑)

文件编译通过但其他包无法访问

原因:包内可见类型只在所在包暴露模型。

修复:将需要公开的类型拆到各自同名文件,再添加 public。

金额被推断为 Double

原因:JSON 数字样本无法说明货币契约。

修复:推断时将精确金额用字符串表示,在应用中换为经过验证的 BigDecimal 转换。

生产可用片段

避开 Record 与 Object 方法名冲突

java

// Input: {"getClass":1,"class":2}
record ApiResponse(
    @JsonProperty("getClass") Long getClassValue,
    @JsonProperty("class") Long classValue
) {}
// Requires import com.fasterxml.jackson.annotation.JsonProperty;

常见问题

输出面向哪些 Java 与 Jackson 版本?

此工作流面向 Java 17+ Record,Jackson 注解面向 2.x。工具只生成源码,依赖由目标项目配置。

为什么生成类型是包内可见?

这样一个文件可以容纳多个顶层模型。其他包需要访问时,将类拆为同名文件并添加 public。

JsonProperty 能映射空键吗?

空注解名选择默认名称,因此生成器在 Jackson 模式拒绝空 JSON 键,需要自行映射。

可选装箱值会保留缺失状态吗?

不会。缺失与显式 null 都可能反序列化为 null。若更新逻辑依赖此区别,需要额外记录字段是否出现。

继续浏览