跳到主要内容

JSON 转 Java 类 — POJO、record 或 Lombok, 带 Jackson / Gson 注解

JSON 转 Java POJO、record 或 Lombok @Data, 粘 JSON 出 camelCase 字段, 带 getter/setter, Jackson @JsonProperty 或 Gson @SerializedName, 嵌套类, 基本类型与装箱推断。

  • 本地处理
  • 分类 开发运维
  • 适合 格式化、校验、压缩或检查和代码相关的文本。
示例:
类型、注解和装箱是怎么推断的

每个 JSON 对象生成一个命名类 (POJO、Lombok @Data 或 Java 16+ 的 record), 字段用 camelCase。当 Java 字段名跟原始 key (snake_case、kebab-case) 不一致时, @JsonProperty (Jackson) 或 @SerializedName (Gson) 注解会保留原始 key, 让 (反)序列化往返。整数推断成 int (超出 32 位范围时用 long); 带小数的推断成 double; 一个数字有时是整数有时带小数, 字段会放宽到 double。对象数组会折叠成一个类 —— 某些元素缺的 key (或值为 null) 会变成"可选", 装箱成 Integer/Long/Double/Boolean, 因为 Java 基本类型不能为 null。只出现过 null 的值推断成 Object。List 的泛型一律装箱。关掉"用基本类型"后, 每个标量都会装箱。

这个工具能做什么

把任意 JSON (Spring Boot REST 响应、Jackson 绑定的 webhook、Kafka 消息、 第三方 API body) 粘进来, 拿到一组干净的 Java 类, 可以直接拖进 `.java` 文件。按你代码库的习惯选形状: 经典 POJO (private 字段 + 生成的 getter 和 setter)、Lombok `@Data` 类, 或者 Java 16+ 的 `record`。JSON 的 key 会转成合法的 Java 标识符 (`site_admin` 变成 `siteAdmin`、`is-active` 变成 `isActive`、`created_at` 变成 `createdAt`); 只要 Java 字段名跟原始 key 不一致, 工具就给字段加上 `@JsonProperty("site_admin")` (Jackson) 或 `@SerializedName("site_admin")` (Gson) 注解, 让反序列化绑到原始 key 而 不是一个被改过的名字。数字不会被一锅端: 能放进 32 位 int 的整数推断成 `int`, 更大的整数推断成 `long`, 带小数的推断成 `double`, 一个字段有时 是整数有时带小数会放宽到 `double`。装箱这条规则是大多数生成器都做错的 地方: Java 基本类型永远不能装 null, 所以任何在对象数组某些元素里缺失、 或出现过 `null` 的字段, 都会被强制装箱成包装类型 (`Integer`、`Long`、 `Double`、`Boolean`), 而必填且始终存在的数字在开启"用基本类型"时保持 基本类型。对象数组会折叠成一个共享类, 所以 `[{"a":1},{"a":1,"b":2}]` 出来是一个同时带两个字段的类型, 而不是两个几乎重复的类。嵌套对象会抽成 自己的命名类 (`User.address` 变成 `UserAddress`), 保留字会加上尾部下划线, 而且只有输出真正用到的 import (`java.util.List`、`lombok.Data`、注解包) 才会被列出来。全部在浏览器里跑: JSON 不碰服务器。

工具细节

输入
文本 + 数值 + 结构化内容
页面会根据工具类型展示文本框、数值控件、文件选择或结构化输入。
输出
即时结果 + 复制 + 下载
结果区优先给出可操作结果,支持项会显示复制、下载或可视化预览。
隐私
浏览器本地处理
主工具逻辑未发现外部 API 调用,输入通常留在当前标签页内处理。
保存 / 分享
可分享链接状态
关键设置会进入 URL,复制链接后别人能复现同一组参数。
性能预算
首屏 JS ≤ 25 KB
没有声明 WASM 依赖,适合快速打开和移动端使用。
适用场景
开发运维 · 程序员
分类和职业标签用于推荐相关工具、组织内链,并帮助用户快速判断是否适合当前任务。

怎么用

  1. 1. 输入

    把内容粘贴或拖入工具面板。

  2. 2. 处理

    点击按钮,在浏览器内本地处理,文件不上传。

  3. 3. 复制 / 下载

    一键复制结果或下载到本地。

JSON 转 Java 类 适合怎么用

适合穿插在写代码、查问题、做 Review、上线前的小任务里。

适合开发场景

  • 格式化、校验、压缩或检查和代码相关的文本。
  • 把片段整理好再放进文档、工单、提交或交接材料。
  • 不切换工具,快速检查一个小 payload。

开发检查项

  • 压缩、混淆这类不可逆处理,先对副本操作。
  • 除非确认工具本地处理,不要粘贴密钥和敏感片段。
  • 转换后的代码上线前,仍要跑自己的测试或 lint。

下一步可以接着做

这些入口会把当前任务接到更完整的工具链里。

  1. 1 JSON 转 C# 类 JSON 转 C# class 或 record, 粘 JSON 出 PascalCase 属性, 带 System.Text.Json 或 Newtonsoft 特性, 嵌套类, 可空 T?, init 访问器, ISO 日期识别成 DateTime。 打开
  2. 2 JSON 转 Go 结构体 JSON 转 Go struct, 粘 JSON 出带 json tag 的结构体, 字段自动导出, 嵌套对象生成子 struct, 可空字段用指针, 支持 int64 与 omitempty。 打开
  3. 3 JSON 转 Python Dataclass JSON 转 Python, 粘 JSON 出 @dataclass 或 Pydantic v2 模型, 带类型注解, Optional 推断, 嵌套子类, 字段转 snake_case 并保留别名。 打开

真实使用场景

  • 接 Spring Boot REST 响应时不再手写 model

    你在 Spring 服务里消费一个第三方 API, 响应有 25 多个字段, key 是 snake_case。curl 一次, 把 JSON 粘进来, 根名设为 `OrderResponse`, 保持 Jackson。每个 `created_at` 这样的 key 都会加 `@JsonProperty`, 让你的 `ObjectMapper` 绑得上, 嵌套对象抽成自己的类, 可选字段正确 装箱。把输出放进 `OrderResponse.java`, 然后 `restTemplate.getForObject(url, OrderResponse.class)` 返回一个完全 类型化的对象, 而不是一个要你一个字段一个字段强转的 `Map<String, Object>`。

  • 用 Java record 生成不可变 DTO

    同事发来他在做的 `/orders` endpoint 的一个请求 body 样例。粘进来, 根名 `CreateOrderRequest`, 类型切成 `record`。你拿到一个一行的、 不可变的 DTO, 带值相等语义和规范构造器: 没有 setter 会被误改, 不依赖 Lombok, 而且 Jackson 从 2.12 起开箱即用地反序列化 record。 响应样例也粘进来命名成第二个 record, 在你们任何一方写 controller 之前就都提交了。

  • 让 Lombok 代码库保持一致

    你的项目到处都在用 Lombok。粘进 payload, 选 `Lombok @Data`, 你会 拿到带 `@Data` 注解的类和 `lombok.Data` 的 import: getter、setter、 `equals`、`hashCode`、`toString` 全在编译期生成, 所以源码跟它来源的 JSON 一样短。新 model 符合评审期待的项目风格, PR 里没有一堆样板 代码要往下翻。

  • 看清 webhook 里到底哪些字段是可选的

    某第三方的 webhook 有时带 `cancelled_at`, 有时不带。把几次 payload 记下来, 作为 JSON 数组粘进来, 数组折叠的检测会标出 `cancelled_at` 在某些元素里缺失, 于是它装箱成包装类型, 而不是一个会悄悄读成 0 的基本类型。在 handler 里做个 null 判断, 现在就能干净地区分 "已取消"和"仍有效", 不用再猜某个默认值是不是代表字段没发。

  • 把 Map<String, Object> 换成真正的类型

    老代码是 `Map<String, Object> data = mapper.readValue(body, Map.class)`, 然后用 `(String) data.get("id")` 这样的强转一层层挖, 丢掉了所有编译期检查。抓一个有代表性的响应粘进来, 生成类, 替换掉 这个 map。现在 `int`、`long`、`double` 在每个字段上都推断好了, 改个 key 名编译期就会报错, 而不是上线后才冒出一个 `ClassCastException`。

常见踩坑

  • 粘一个对象进来然后期待某些字段被装箱 (Integer 而非 int)。单个对象没有“key 缺失”信号, 所以除非值本身就是 null, 否则每个数字字段都是必填、保持基本类型。可选 / 装箱推断只在“多个对象组成的数组”里生效 (有的元素带某个 key、有的不带)。想从一个样本探索可选性, 把它包成 `[{...}]`。

  • 把金额或需要精确小数的字段留成 `double`。工具对任何带小数的数字都推断成 `double`, 但 `double` 是二进制浮点, 会把 0.1 或货币总额这类值表示错。金额请在生成后手动把那些字段改成 `BigDecimal`: JSON 不带“这个数字需要精确十进制精度”的任何信号。

  • 删掉 @JsonProperty 注解还指望绑定照常工作。这个注解正是把 `site_admin` (线上) 映射到 `siteAdmin` (字段) 的东西。删了它, Jackson/Gson 会去找一个根本不存在的 `siteAdmin` key, 字段就留成 null。要么留着注解, 要么在 mapper 上配一个全局命名策略。

  • 在 Java 16 之前的项目里选 `record`。record 是 Java 16 的语言特性 (14–15 是预览)。如果你的构建目标是 Java 11 或 8, 生成的 `record` 编译不过, 这些目标请改选 POJO 或 Lombok。

隐私说明

你粘进来的 JSON 不会离开这个浏览器标签页。解析和类型推断走浏览器内建的 `JSON.parse`, 没有任何网络请求, 也不对文本框内容做 analytics。分享链接 会把你的输入和根类名编码进 URL 以便复现结果, 也就是说由你决定何时 分享。如果 payload 敏感 (内部 ID、客户数据、生产响应), 直接复制生成的 Java 代码, 不要分享链接。只有选项 (注解风格、POJO/record/Lombok、基本 类型) 会存进 localStorage, 让你偏好的风格在多次访问之间保留。

常见问题

类似工具组合

做你这行的人, 还会一起用这些。

Made by Toolora · 100% client-side · Updated 2026-06-14