JSON 转 Java POJO

即时从 JSON 生成 Java POJO 类,支持 Jackson、Gson 和 Lombok 注解,处理嵌套对象、数组和自定义根类名。免费,在浏览器中运行。

  • 在浏览器中处理
  • 数据不离开你的设备
  • 免费 · 无需注册
留空时使用 RootObject。修改名称后,等待 300 毫秒自动生成。
注解 选择无注解、Jackson、Gson 或 Lombok (@Data),切换后立即重新生成。
用含嵌套对象、数组和 null 的示例替换 JSON,并按当前设置立即生成。
清空 JSON、输出和状态,保留根名和所选模式。在工具内按 Ctrl/⌘+L 还会清空根名。
输入合法 JSON,不能带注释或末尾逗号。停止输入 300 毫秒后自动生成;JSON 无效时会清空输出并显示错误。
Java 输出
复制当前显示的完整 Java 输出。输出为空时不复制。

输入 JSON 或载入示例以生成 Java。

示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。

类型映射

  • null → Object
  • 字符串 → String
  • 整数 → int,超出 int 范围(±2,147,483,647 左右)时 → long
  • 浮点数 → double
  • 布尔值 → boolean
  • 数组 → List<T>
  • 嵌套对象 → 独立 public class

示例

给定如下 JSON:

{"user": {"first_name": "Alice", "age": 30}, "tags": ["admin"]}

Lombok 模式下生成:

import java.util.List;
import lombok.Data;

@Data
public class RootObject {
    private User user;
    private List<String> tags;
}

@Data
public class User {
    private String firstName;
    private int age;
}

示例:带嵌套明细的订单(Jackson 模式)

输入:

{"order_id": 9007, "customer": {"name": "Alice", "vip": true}, "items": [{"sku": "A-1", "qty": 2, "price": 9.5}, {"sku": "B-2", "qty": 1, "price": 20}], "note": null}

输出(省略了 getter / setter):

import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;

public class RootObject {
  @JsonProperty("order_id")
  private int orderId;
  private Customer customer;
  private List<ItemsItem> items;
  private Object note;
  // getters and setters omitted here
}

public class Customer {
  private String name;
  private boolean vip;
  // ...
}

public class ItemsItem {
  private String sku;
  private int qty;
  private double price;
  // ...
}

这段输出不能整体存成一个文件编译:每个 public class 必须放在同名文件里。拆成 RootObject.java、Customer.java、ItemsItem.java 三个文件后,「无注解」模式的输出可以直接用 javac 21 编译。

生成后要检查的地方

  • price 是 double:第一个元素是 9.5、第二个是 20,工具把 int 和 double 合并成更宽的 double。金额建议改用 BigDecimal。
  • 样例里的 null 会变成 Object,请换成真实类型。
  • 样例里超出 int 范围的整数(如毫秒时间戳 1730000000000)会生成 long;样例值小、实际可能变大的 ID 请自己改成 long。
  • Lombok 模式不会加 @JsonProperty,order_id 不再映射到 orderId:
import java.util.List;
import lombok.Data;

@Data
public class RootObject {
  private int orderId;
  private Customer customer;
  private List<ItemsItem> items;
  private Object note;
}

Lombok 模式下请自己补 @JsonProperty,或给 Jackson 配置 PropertyNamingStrategies.SNAKE_CASE。Gson 模式用 @SerializedName 做同样的映射。

用 Jackson 读取 JSON:

ObjectMapper mapper = new ObjectMapper();
RootObject order = mapper.readValue(json, RootObject.class);

Java 16 及以上,简单的不可变模型可以改用 record,Jackson 2.12 起支持读取 record:

public record Customer(String name, boolean vip) {}

示例:同名 key 结构不同、key 不是合法 Java 名(Jackson 模式)

{"billing": {"address": {"city": "Paris"}}, "shipping": {"address": {"line1": "1 Main St"}}, "class": "A", "2fa": true, "URL": "https://example.com"}

输出(省略了大部分 getter / setter):

import com.fasterxml.jackson.annotation.JsonProperty;

public class RootObject {
  private Billing billing;
  private Shipping shipping;
  @JsonProperty("class")
  private String classValue;
  @JsonProperty("2fa")
  private boolean t2fa;
  @JsonProperty("URL")
  private String uRL;

  @JsonProperty("URL")
  public String getURL() {
  // 其余 getter / setter 省略
}

public class Address {
  private String city;
  // ...
}

public class ShippingAddress {
  private String line1;
  // ...
}
  • 两个 address 字段不同,第二个用父级名作前缀(ShippingAddress)。字段和类型都相同的对象共用一个类;加前缀后仍重名时再加数字。
  • Java 关键字和字面量加 Value(class → classValue),会以数字开头的名字加 T(2fa → t2fa),变成同一个名字的 key 依次加数字(first-name 和 first_name → firstName 和 firstName2)。注解保留原 key。
  • Jackson 把 getURL() 读作 url,不是 uRL。getter 和 setter 不加注解时,Jackson 会多出一个属性,读到 URL 时报错。Gson 只读字段,不需要这条注解。

工具的测试用 javac 21、Jackson 2.17.2 和 Gson 2.11.0 编译每段 Jackson / Gson 输出,读入样例再写回,结果与原 JSON 相同;每段 Lombok 1.18.34 输出都能编译。

限制

  • 无注解与 Lombok 模式只有 Java 名。这两种模式下 classValue、t2fa 对应不到 class、2fa。key 不是合法 Java 名时请用 Jackson 或 Gson 模式。
  • Jackson 写不出空 key。@JsonProperty("") 表示「用默认名」,所以对 key "" 工具写 @JsonAlias("") 加一行注释:Jackson 能读 {"": 4},写回时是 {"t": 4}。Gson 模式写 @SerializedName(""),保留空 key。

FAQ

这个工具生成什么?

从 JSON 生成 Java POJO(Plain Old Java Object)类。每个嵌套对象都会成为独立的公共类,包含私有字段和 getter/setter 方法(Lombok 模式使用 @Data)。

支持哪些注解模式?

四种模式:无注解(纯 POJO,含 getter/setter)、Jackson(@JsonProperty)、Gson(@SerializedName)和 Lombok(@Data)。Jackson 和 Gson 模式在 JSON key 与字段名不一致时给字段加注解;Jackson 由 getter / setter 推出的名字与字段名不同时(getURL 被读作 url),Jackson 模式也给 getter 和 setter 加注解。无注解与 Lombok 模式不保留原 key。

JSON 类型如何映射到 Java 类型?

string→String、integer→int(超出 int 范围为 long)、float/double→double、boolean→boolean、null→Object、array→List<T>、嵌套对象→独立类。

何时会添加 List 导入?

当输出中存在数组字段时,会自动添加 import java.util.List。

我的数据会发送到服务器吗?

不会。整个转换在浏览器中运行,数据不会离开本机。